Плагин модернизатора Gradle обнаруживает использование устаревших API, которые заменяют современные версии Java.
Эти современные API часто более эффективные, безопаснее и идиоматические, чем унаследованные эквиваленты. Например, модернизатор может обнаружить использование Vector вместо ArrayList , String.getBytes(String) вместо String.getBytes(Charset) и guava Objects.equal . Equal вместо java 7 Objects.equals . Конфигурация по умолчанию обнаруживает более 200 APIS устаревших, включая сторонние библиотеки, такие как гуава.
Этот плагин Gradle на самом деле представляет собой обертку вокруг плагина Modernizer Maven, так что такая же функциональность теперь доступна в сборках Gradle.
Чтобы использовать плагин, включите в свой сценарий сборки:
// 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 '
} Если вы все еще используете старый идентификатор плагина com.github.andygoossens.gradle-modernizer-plugin пожалуйста, переключитесь на com.github.andygoossens.modernizer вместо этого.
Если вы хотите напрямую позвонить в задачу modernizer :
./gradlew modernizer Большую часть времени вам не нужно называть задачу modernizer самостоятельно. Задача знает свое место внутри жизненного цикла сборки, и она будет выполняться всякий раз, когда она считается необходимым.
| Название свойства | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| Toolversion | Нить | См. Таблицу ниже | Версия Modernizer-Maven-Plugin, которая будет использоваться. |
| Javaversion | Нить | $ {project.targetCompatibility} | Целевая Java версия. Решает, какие нарушения будут применяться. |
| Неудача | логический | ЛОЖЬ | Неудача строится, когда было обнаружено нарушение. |
| Включите накласс | логический | ЛОЖЬ | Будут ли искать занятия тестовыми классами нарушения. |
| Нарушение | Нить | предупреждать | Регистрирует нарушения на этом уровне. Возможные значения: ошибка, предупреждение, информация, отладка, трассировка |
| Нарушения | Нить | нулевой | Указанный пользователем файл нарушения. Переопределяет стандартные проверки нарушения. |
| Нарушения | Нить[] | [] | Указанные пользователем файлы нарушения. Переопределяет violationsFile и стандартные проверки. |
| Исключения | Нить | нулевой | Отключает указанные пользователем нарушения. См. Описание формата ниже. |
| Исключения | Нить[] | [] | Нарушения отключения. См. Описание формата ниже. |
| exclusionPatterns | Нить[] | [] | Закономерности нарушения отключить. См. Описание формата ниже. |
| Игноризации | Нить[] | [] | Префиксы пакета, чтобы игнорировать. См. Описание формата ниже. |
| Игнорецелаканампаттернс | Нить[] | [] | Полные квалифицированные имена классов (включая пакет), чтобы игнорировать. См. Описание формата ниже. |
| Игнорируемые классы | логический | истинный | Будет ли классы, аннотированные с аннотацией, политика удержания которых - runtime или class и чье простое имя содержит «генерируемое», будет проигнорирована. |
| пропускать | логический | ЛОЖЬ | Должна ли задача быть пропущенная. |
modernizer {
failOnViolations = true
includeTestClasses = true
}Обратите внимание, что вы можете только настроить плагин в проектах, где был применен плагин. См. Раздел «Использование» выше.
Это текстовый файл с одним исключением на строку в формате Javap.
Пример:
java/lang/String.getBytes:(Ljava/lang/String;)[B
com/google/common/base/Function
sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B
Это список исключений. Каждое исключение должно быть в формате Javap.
Пример:
modernizer {
exclusions = [
' java/lang/String.getBytes:(Ljava/lang/String;)[B ' ,
' com/google/common/base/Function ' ,
' sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B ' ,
]
}Это список моделей исключения. Каждое исключение должно быть регулярным выражением, которое соответствует формату Javap с нарушением.
Пример:
modernizer {
exclusionPatterns = [
' java/lang/.* ' ,
]
}Это список префиксов пакетов, для которых никаких нарушений не сообщается.
Игнорирование пакета проигнорирует всех своих детей. Указание foo.bar впоследствии игнорирует foo.bar.* , foo.bar.baz.* И так далее.
Пример:
modernizer {
ignorePackages = [
' com.github.andygoossens ' ,
]
}Это список полных квалифицированных имен классов (включая пакет), чтобы игнорировать. Каждое исключение должно быть регулярным выражением, которое соответствует пакету и/или классу; Название пакета будет подвергнуто резкому, а не разделено на точке (формат ASM).
Пример:
modernizer {
ignoreClassNamePatterns = [
' .*MyLegacyClass ' ,
]
} Вы не можете игнорировать элементы только с помощью свойств расширения (см. Выше), вы можете указать, что плагин должен игнорировать нарушения в классе или методе, добавив @SuppressModernizer к элементу, который вы хотите игнорировать:
import org . gaul . modernizer_maven_annotations . SuppressModernizer ;
public class Example {
@ SuppressModernizer
public static void method () { /* your code here */ }
}Добавьте следующую зависимость в свой сценарий сборки 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 ' Плагин Modernizer Gradle - это в основном обертка вокруг плагина Modernizer Maven. В таблице ниже описывается, как они относятся друг к другу.
| Плагин модернизатора Gradle | Модернизатор 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 |
Обратите внимание, что вы можете переопределить версию плагина Modernizer Modernizer Maven, которая будет использоваться. Укажите нужную версию в свойстве расширения toolVersion . Обратите внимание: это может сломаться, когда произойдет смена API!
Звучит отлично! Тем не менее, я не могу добавить его сам, так как модернизатор Maven Plugin поддерживает список правил нарушения. Откройте там проблему и опишите, что вы нашли.
Обратите внимание, что им может потребоваться некоторое время, чтобы выпустить новую версию с вашим правилом.
Это не вопрос. К сожалению, я, возможно, не нашел время, чтобы выпустить новую версию плагина Gradle.
Тем временем вы можете указать желаемую версию в свойстве расширения toolVersion . Затем плагин Gradle заберет запрошенную версию, и, если API остается прежним, используйте ее.
modernizer {
toolVersion = ' 1.10.0 '
}Это зависит от того, является ли функция специфической для Gradle. Если это так, то я посмотрю, что я могу сделать. Однако, если это требуют изменений в плагине Modernizer Maven, то он зависит от его сопровождающих.
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.