Das Gradle Modernizer -Plugin erkennt die Verwendung von Legacy -APIs, die moderne Java -Versionen ersetzen.
Diese modernen APIs sind oft leistungsfähiger, sicherer und idiomatischer als die älteren Äquivalente. Beispielsweise kann Modernizer Objects.equals Verwendung von Vector anstelle von ArrayList , String.getBytes(String) anstelle von String.getBytes(Charset) und Guava Objects.equal erkennen. Die Standardkonfiguration erkennt über 200 Legacy-APIs, einschließlich Bibliotheken von Drittanbietern wie Guava.
Dieses Gradle -Plugin ist eigentlich ein Wrapper um Modernizer Maven -Plugin, so dass die gleiche Funktionalität jetzt in Gradle -Builds erhältlich ist.
Um das Plugin zu verwenden, geben Sie in Ihr Build -Skript auf:
// 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 '
} Wenn Sie immer noch die alte Plugin-ID com.github.andygoossens.gradle-modernizer-plugin verwenden, wechseln Sie stattdessen stattdessen zu com.github.andygoossens.modernizer .
Wenn Sie die modernizer -Aufgabe direkt anrufen möchten:
./gradlew modernizer Meistens müssen Sie die modernizer -Aufgabe nicht selbst anrufen. Die Aufgabe kennt ihren Platz innerhalb des Build -Lebenszyklus und wird ausgeführt, wenn sie als notwendig erachtet wird.
| Eigenschaftsname | Typ | Standardwert | Beschreibung |
|---|---|---|---|
| Toolversion | Saite | Siehe Tabelle unten | Version von Modernizer-Maven-Plugin, die verwendet wird. |
| Javaversion | Saite | $ {project.targetCompatibilität} | Ziel Java -Version. Entscheidet, welche Verstöße gelten werden. |
| Failonviolationen | boolean | FALSCH | FAIL BAUS Wenn ein Verstoß festgestellt wurde. |
| Einschlüsse | boolean | FALSCH | Ob Testkurse nach Verstößen gesucht werden. |
| VerstoßliGilovel | Saite | warnen | Protokolle Verstöße auf dieser Ebene. Mögliche Werte: Fehler, Warnen, Infos, Debugg, Spur |
| Verstöße | Saite | NULL | Benutzerdefinierte Verstoßdatei. Überschreien Sie Standardverletzungsüberprüfungen. |
| Verstöße | String [] | [] | Benutzerdefinierte Verstoßdateien. Überschreibt violationsFile und Standardprüfungen. |
| Ausschlüsse | Saite | NULL | Deaktivieren Sie benutzerdefinierte Verstöße. Siehe Formatbeschreibung unten. |
| Ausschlüsse | String [] | [] | Verstöße gegen Deaktivieren. Siehe Formatbeschreibung unten. |
| Ausgrenzung | String [] | [] | Verstoßmustern zu deaktivieren. Siehe Formatbeschreibung unten. |
| ignorieren | String [] | [] | Paketpräfixe zu ignorieren. Siehe Formatbeschreibung unten. |
| IgnoreClassNamePatters | String [] | [] | Voll qualifizierte Klassennamen (inkl. Paket) zu ignorieren. Siehe Formatbeschreibung unten. |
| Ignorgeneratedclasss | boolean | WAHR | Ob Klassen mit einer Annotation, deren Aufbewahrungsrichtlinie, runtime oder class und deren einfacher Name "generiert" ist, wird ignoriert. |
| überspringen | boolean | FALSCH | Ob die Aufgabe übersprungen werden sollte. |
modernizer {
failOnViolations = true
includeTestClasses = true
}Beachten Sie, dass Sie das Plugin nur in Projekten konfigurieren können, bei denen das Plugin angewendet wurde. Siehe Abschnitt "Nutzung" oben.
Dies ist eine Textdatei mit einem Ausschluss pro Zeile im Javap -Format.
Beispiel:
java/lang/String.getBytes:(Ljava/lang/String;)[B
com/google/common/base/Function
sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B
Dies ist eine Liste von Ausschlüssen. Jeder Ausschluss sollte im Javap -Format sein.
Beispiel:
modernizer {
exclusions = [
' java/lang/String.getBytes:(Ljava/lang/String;)[B ' ,
' com/google/common/base/Function ' ,
' sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B ' ,
]
}Dies ist eine Liste von Ausschlussmustern. Jeder Ausschluss sollte ein regulärer Ausdruck sein, der dem Javap -Format eines Verstoßes entspricht.
Beispiel:
modernizer {
exclusionPatterns = [
' java/lang/.* ' ,
]
}Dies ist eine Liste der Paketpräfixe, für die keine Verstöße gemeldet werden.
Wenn Sie ein Paket ignorieren, ignorieren Sie alle Kinder. Angeben foo.bar ignoriert anschließend foo.bar.* , foo.bar.baz.* Usw.
Beispiel:
modernizer {
ignorePackages = [
' com.github.andygoossens ' ,
]
}Dies ist eine Liste der voll qualifizierten Klassennamen (inkl. Paket), die ignoriert werden sollen. Jeder Ausschluss sollte ein regulärer Ausdruck sein, der einem Paket und/oder einer Klasse entspricht. Der Paketname wird mit Slash getrennt und nicht dot getrennt (ASM-Format).
Beispiel:
modernizer {
ignoreClassNamePatterns = [
' .*MyLegacyClass ' ,
]
} Sie können Elemente nicht nur durch die Verwendung von Erweiterungseigenschaften ignorieren (siehe oben), sondern auch angeben, dass das Plugin Verstöße innerhalb einer Klasse oder Methode ignorieren sollte, indem Sie @SuppressModernizer zu dem Element hinzufügen, das Sie ignorieren möchten:
import org . gaul . modernizer_maven_annotations . SuppressModernizer ;
public class Example {
@ SuppressModernizer
public static void method () { /* your code here */ }
}Fügen Sie Ihrem Gradle Build -Skript die folgende Abhängigkeit hinzu:
// 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 ' Das Gradle Modernizer -Plugin ist im Grunde genommen ein Wrapper um Modernizer Maven Plugin. Die folgende Tabelle beschreibt, wie sie sich miteinander beziehen.
| Gradle Modernizer Plugin | 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 |
Beachten Sie, dass Sie die Standardversion von Modernizer Maven Plugin überschreiben können, die verwendet wird. Geben Sie die gewünschte Version in der toolVersion Extension -Eigenschaft an. Achten Sie darauf: Dies könnte brechen, wenn es eine API -Änderung gibt!
Klingt großartig! Ich kann es jedoch nicht selbst hinzufügen, als Modernizer Maven Plugin die Liste der Verstoßregeln beibehält. Öffnen Sie dort ein Problem und beschreiben Sie, was Sie gefunden haben.
Beachten Sie, dass es einige Zeit dauern kann, bis sie eine neue Version mit Ihrer Regel veröffentlichen.
Das ist keine Frage. Leider habe ich möglicherweise nicht die Zeit gefunden, eine neue Version des Gradle -Plugins zu veröffentlichen.
In der Zwischenzeit können Sie die gewünschte Version in der toolVersion Extension -Eigenschaft angeben. Das Gradle -Plugin nimmt dann die angeforderte Version ab und benutze sie, wenn die API immer noch der gleiche ist.
modernizer {
toolVersion = ' 1.10.0 '
}Dies hängt davon ab, ob die Funktion für Gradle spezifisch ist. Wenn ja, dann werde ich sehen, was ich tun kann. Wenn jedoch Änderungen im Modernizer Maven -Plugin erforderlich sind, liegt es an seinen Wartenden.
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.