Le plugin Gradle Modernizer détecte les utilisations des API héritées que les versions Java modernes remplacent.
Ces API modernes sont souvent plus performantes, plus sûres et idiomatiques que les équivalents hérités. Par exemple, le modernisateur peut détecter les utilisations de Vector au lieu de ArrayList , String.getBytes(String) au lieu de String.getBytes(Charset) et de goyava Objects.equal au lieu de Java 7 Objects.equals . La configuration par défaut détecte plus de 200 API héritées, y compris des bibliothèques tierces comme la goyave.
Ce plugin Gradle est en fait un emballage autour du plugin Maven Modernizer afin que la même fonctionnalité soit maintenant disponible dans Gradle Builds.
Pour utiliser le plugin, incluez dans votre script de construction:
// 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 '
} Si vous utilisez toujours l'ancien plugin id com.github.andygoossens.gradle-modernizer-plugin , veuillez passer à com.github.andygoossens.modernizer à la place.
Si vous souhaitez appeler directement la tâche modernizer :
./gradlew modernizer La plupart du temps, vous n'avez pas besoin d'appeler la tâche modernizer vous-même. La tâche connaît sa place à l'intérieur du cycle de vie de construction, et elle s'exécutera chaque fois qu'elle est jugée nécessaire.
| Nom de propriété | Taper | Valeur par défaut | Description |
|---|---|---|---|
| Version à l'origine | Chaîne | Voir le tableau ci-dessous | Version du modernisateur-Maven-Plugin qui sera utilisé. |
| javavaversion | Chaîne | $ {project.targetCompatibilité} | Cibler la version Java. Décide quelles violations s'appliqueront. |
| défaillance | booléen | FAUX | Échec de la construction lorsqu'une violation a été détectée. |
| y compris les classes | booléen | FAUX | Si des classes de test seront recherchées pour des violations. |
| violationloglevel | Chaîne | avertir | Journaux des violations à ce niveau. Valeurs possibles: erreur, avertir, info, débogage, trace |
| violations | Chaîne | nul | Fichier de violation spécifié par l'utilisateur. Remplace les contrôles de violation standard. |
| violations | Chaîne[] | [] | Fichiers de violation spécifiés par l'utilisateur. Remplace violationsFile et les vérifications standard. |
| exclusions | Chaîne | nul | Désactive les violations spécifiées par l'utilisateur. Voir la description du format ci-dessous. |
| exclusions | Chaîne[] | [] | Violations à désactiver. Voir la description du format ci-dessous. |
| ExclusionPatterns | Chaîne[] | [] | Modèles de violation à désactiver. Voir la description du format ci-dessous. |
| ignorer les packages | Chaîne[] | [] | Préfixes de package à ignorer. Voir la description du format ci-dessous. |
| IgnoreClassNamepatterns | Chaîne[] | [] | Noms de classe qualifiés complets (package incl.) À ignorer. Voir la description du format ci-dessous. |
| IgnoreGenerated Classes | booléen | vrai | Que les classes annotent avec une annotation dont la politique de rétention est runtime ou class et dont le nom simple contienne "généré" sera ignoré. |
| sauter | booléen | FAUX | Si la tâche doit être ignorée. |
modernizer {
failOnViolations = true
includeTestClasses = true
}Notez que vous ne pouvez configurer que le plugin dans des projets où le plugin a été appliqué. Voir la section «utilisation» ci-dessus.
Il s'agit d'un fichier texte avec une exclusion par ligne au format Javap.
Exemple:
java/lang/String.getBytes:(Ljava/lang/String;)[B
com/google/common/base/Function
sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B
Ceci est une liste d'exclusions. Chaque exclusion doit être dans le format Javap.
Exemple:
modernizer {
exclusions = [
' java/lang/String.getBytes:(Ljava/lang/String;)[B ' ,
' com/google/common/base/Function ' ,
' sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B ' ,
]
}Il s'agit d'une liste de modèles d'exclusion. Chaque exclusion devrait être une expression régulière qui correspond au format Javap d'une violation.
Exemple:
modernizer {
exclusionPatterns = [
' java/lang/.* ' ,
]
}Il s'agit d'une liste de préfixes de packages pour lesquels aucune violation ne sera signalée.
Ignorer un paquet ignorera tous ses enfants. Spécifier foo.bar ignore par la suite foo.bar.* , foo.bar.baz.* Et ainsi de suite.
Exemple:
modernizer {
ignorePackages = [
' com.github.andygoossens ' ,
]
}Il s'agit d'une liste de noms de classe qualifiés complets (package incl.) À ignorer. Chaque exclusion doit être une expression régulière qui correspond à un package et / ou à une classe; Le nom du package sera séparé par slash, non séparé (format d'ASM).
Exemple:
modernizer {
ignoreClassNamePatterns = [
' .*MyLegacyClass ' ,
]
} Vous ne pouvez pas ignorer les éléments en utilisant les propriétés d'extension (voir ci-dessus), vous pouvez indiquer que le plugin doit ignorer les violations dans une classe ou une méthode en ajoutant @SuppressModernizer à l'élément que vous souhaitez ignorer:
import org . gaul . modernizer_maven_annotations . SuppressModernizer ;
public class Example {
@ SuppressModernizer
public static void method () { /* your code here */ }
}Ajoutez la dépendance suivante à votre script Gradle Build:
// 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 ' Le plugin Gradle Modernizer est essentiellement un emballage autour du plugin Maven Modernizer. Le tableau ci-dessous décrit comment ils se rapportent les uns aux autres.
| Plugin Gradle Modernizer | Plugin Maven Modernizer |
|---|---|
| 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 |
Notez que vous pouvez remplacer la version par défaut du plugin Maven Modernizer qui sera utilisé. Spécifiez la version souhaitée dans la propriété d'extension toolVersion . Faites attention: cela pourrait se casser lorsqu'il y a un changement d'API!
Ça a l'air génial! Cependant, je ne peux pas l'ajouter moi-même car le plugin Maven Modernizer conserve la liste des règles de violation. Ouvrez un problème là-bas et décrivez ce que vous avez trouvé.
Notez qu'il pourrait leur prendre un peu de temps pour publier une nouvelle version avec votre règle.
Ce n'est pas une question. Malheureusement, je n'ai peut-être pas trouvé le temps de publier une nouvelle version du plugin Gradle.
En attendant, vous pouvez spécifier la version souhaitée dans la propriété d'extension toolVersion . Le plugin Gradle ramassera ensuite la version demandée et, si l'API est toujours la même, utilisez-la.
modernizer {
toolVersion = ' 1.10.0 '
}Cela dépend si la fonctionnalité est spécifique à Gradle. Si c'est le cas, je verrai ce que je peux faire. Cependant, s'il nécessite des changements dans le plugin Maven Modernizer, il appartient à ses mainteneurs.
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.