O plug -in do Gradle Modernizer detecta usos de APIs herdadas que as versões java modernas substituem.
Essas APIs modernas geralmente são mais performáticas, mais seguras e idiomáticas do que os equivalentes do legado. Por exemplo, o modernizador pode detectar usos do Vector em vez de ArrayList , String.getBytes(String) em vez de String.getBytes(Charset) e Objects.equal de goiaba.equal em vez de Objects.equals java 7. A configuração padrão detecta mais de 200 APIs legadas, incluindo bibliotecas de terceiros como a goiaba.
Este plug -in Gradle é na verdade um invólucro no plug -in Modernizer Maven, para que a mesma funcionalidade esteja agora disponível no Gradle Builds.
Para usar o plug -in, inclua no seu script de construção:
// You need to do this only once
plugins {
// Option A: When your root project has a SourceSet
// e.g. the root project is applying the java/groovy/kotlin plugin as well
id " com.github.andygoossens.modernizer " version " 1.10.0 "
// Option B: When your root project does not have a SourceSet
id " com.github.andygoossens.modernizer " version " 1.10.0 " apply false
}
repositories {
mavenCentral()
}
// Option 1: Apply the plugin in each project where you want to use it
// Gradle's old way:
apply plugin : ' com.github.andygoossens.modernizer '
// Gradle's new way:
plugins {
id ' com.github.andygoossens.modernizer '
}
// Option 2: Apply the plugin in all projects (even in the root project)
// Preferably used with option A (= not mentioning 'apply false')
allprojects {
apply plugin : ' com.github.andygoossens.modernizer '
}
// Option 3: Apply the plugin in all sub-projects (but not the root project)
// Preferably used with option B (= mentioning 'apply false')
subprojects {
apply plugin : ' com.github.andygoossens.modernizer '
} Se você ainda estiver usando o ID do plug-in antigo com.github.andygoossens.gradle-modernizer-plugin , mude para com.github.andygoossens.modernizer .
Se você quiser chamar a tarefa modernizer diretamente:
./gradlew modernizer Na maioria das vezes, você não precisa chamar a tarefa modernizer . A tarefa conhece seu lugar dentro do ciclo de vida da construção e será executado sempre que for considerado necessário.
| Nome da propriedade | Tipo | Valor padrão | Descrição |
|---|---|---|---|
| Toolversion | Corda | Veja a tabela abaixo | Versão do modernizer-maven-plugin que será usado. |
| Javaversion | Corda | $ {Project.targetCompatibility} | VERSÃO Java alvo. Decide quais violações serão aplicadas. |
| FailonViOlations | booleano | falso | Falha na construção quando uma violação foi detectada. |
| IncluirTestClasses | booleano | falso | Se as aulas de teste serão pesquisadas por violações. |
| ViolationLoglevel | Corda | avisar | Registra violações nesse nível. Valores possíveis: erro, aviso, informação, depuração, rastreamento |
| ViolationsFile | Corda | nulo | Arquivo de violação especificado pelo usuário. Substitui verificações de violação padrão. |
| Violationsfiles | Corda[] | [] | Arquivos de violação especificados pelo usuário. Substitui violationsFile e verificações padrão. |
| exclusõesfile | Corda | nulo | Desativa violações especificadas pelo usuário. Veja o formato Descrição abaixo. |
| exclusões | Corda[] | [] | Violações para desativar. Veja o formato Descrição abaixo. |
| exclusãopatterns | Corda[] | [] | Padrões de violação para desativar. Veja o formato Descrição abaixo. |
| ignorepackages | Corda[] | [] | Prefixos de embalagem para ignorar. Veja o formato Descrição abaixo. |
| ignorEclassNamePatterns | Corda[] | [] | Nomes de classe qualificados completos (incl. Pacote) para ignorar. Veja o formato Descrição abaixo. |
| ignoreGeneratedclasses | booleano | verdadeiro | Se as aulas anotadas com uma anotação cuja política de retenção é runtime ou class e cujo nome simples contém "gerado" será ignorado. |
| pular | booleano | falso | Se a tarefa deve ser ignorada. |
modernizer {
failOnViolations = true
includeTestClasses = true
}Observe que você pode configurar apenas o plug -in em projetos em que o plug -in foi aplicado. Consulte a seção "Uso" acima.
Este é um arquivo de texto com uma exclusão por linha no formato Javap.
Exemplo:
java/lang/String.getBytes:(Ljava/lang/String;)[B
com/google/common/base/Function
sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B
Esta é uma lista de exclusões. Cada exclusão deve estar no formato Javap.
Exemplo:
modernizer {
exclusions = [
' java/lang/String.getBytes:(Ljava/lang/String;)[B ' ,
' com/google/common/base/Function ' ,
' sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B ' ,
]
}Esta é uma lista de padrões de exclusão. Cada exclusão deve ser uma expressão regular que corresponda ao formato Javap de uma violação.
Exemplo:
modernizer {
exclusionPatterns = [
' java/lang/.* ' ,
]
}Esta é uma lista de prefixos de pacotes para os quais nenhuma violações será relatada.
Ignorar um pacote ignorará todos os seus filhos. Especificar foo.bar Posteriormente ignora foo.bar.* , foo.bar.baz.* E assim por diante.
Exemplo:
modernizer {
ignorePackages = [
' com.github.andygoossens ' ,
]
}Esta é uma lista de nomes de classe qualificados completos (incl. Pacote) para ignorar. Cada exclusão deve ser uma expressão regular que corresponda a um pacote e/ou classe; O nome do pacote será separado por barra, não separado por pontos (formato do ASM).
Exemplo:
modernizer {
ignoreClassNamePatterns = [
' .*MyLegacyClass ' ,
]
} Você não pode apenas ignorar os elementos usando propriedades de extensão (veja acima), pode indicar que o plug -in deve ignorar violações dentro de uma classe ou método adicionando @SuppressModernizer ao elemento que você gostaria de ignorar:
import org . gaul . modernizer_maven_annotations . SuppressModernizer ;
public class Example {
@ SuppressModernizer
public static void method () { /* your code here */ }
}Adicione a seguinte dependência ao seu script de construção gradle:
// Option 1: compile time dependency (Gradle's old way)
compile ' org.gaul:modernizer-maven-annotations:2.6.0 '
// Option 2: implementation dependency (Gradle's new way)
implementation ' org.gaul:modernizer-maven-annotations:2.6.0 ' O plug -in do Gradle Modernizer é basicamente um invólucro em torno do plug -in Modernizer Maven. A tabela abaixo descreve como eles se relacionam.
| Plug -in do modernizador gradle | Modernizer Maven Plugin |
|---|---|
| 1.0.x | 1.6.0 |
| 1.1.x | 1.6.0 |
| 1.2.x | 1.8.0 |
| 1.3.x | 2.0.0 |
| 1.4.x | 2.1.0 |
| 1.5.x | 2.2.0 |
| 1.6.x | 2.3.0 |
| 1.7.x | 2.5.0 |
| 1.8.x | 2.6.0 |
| 1.9.x | 2.7.0 |
| 1.10.0 | 2.9.0 |
Observe que você pode substituir a versão padrão do plug -in Modernizer Maven, que será usado. Especifique a versão desejada na propriedade Extensão da Transmissão toolVersion . Preste atenção: isso pode quebrar quando houver uma mudança de API!
Parece ótimo! No entanto, não posso adicioná -lo, pois o plug -in Modernizer Maven mantém a lista de regras de violação. Abra um problema lá e descreva o que você encontrou.
Observe que pode levar algum tempo para eles lançarem uma nova versão com sua regra.
Isso não é uma pergunta. Infelizmente, talvez eu não tenha encontrado tempo para lançar uma nova versão do plug -in gradle.
Enquanto isso, você pode especificar a versão desejada na propriedade Extensão toolVersion . O plug -in gradle pegará a versão solicitada e, se a API ainda for a mesma, use -a.
modernizer {
toolVersion = ' 1.10.0 '
}Isso depende se o recurso é específico para o gradle. Se for, vou ver o que posso fazer. No entanto, se exigir alterações no plug -in do modernizador, depende de seus mantenedores.
Licensed under the Apache License, Version 2.0
Copyright (C) 2016-2024 Andy Goossens
Inspired by, and based upon code from:
Modernizer Maven Plugin
Copyright (C) 2014-2023 Andrew Gaul
Gradle Docker plugin
Copyright (C) 2014 the original author or authors.