Gradle Modernizer插件检测到现代Java版本取代的传统API的用途。
这些现代API通常比遗产等效物更具性能,更安全和惯用性。例如,Modernizer可以检测Vector而不是ArrayList的用途, String.getBytes(String)而不是String.getBytes(Charset)和guava Objects.equal equals Objects.equals 。默认配置可检测到200多个遗留API,包括诸如Guava之类的第三方库。
这个Gradle插件实际上是围绕Modernizer Maven插件的包装器,因此现在在Gradle Builds中可以使用相同的功能。
要使用该插件,请在您的构建脚本中包含:
// 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 '
}如果您仍在使用旧的插件ID com.github.andygoossens.gradle-modernizer-plugin ,请切换到com.github.andygoossens.modernizer 。
如果您想直接调用modernizer任务:
./gradlew modernizer大多数情况下,您无需亲自调用modernizer任务。该任务知道其在构建生命周期内的位置,只要有必要,它将执行。
| 属性名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| 刀具 | 细绳 | 请参阅下表 | 将使用的现代化器弹药的版本。 |
| Javaversion | 细绳 | $ {project.targetCompatibility} | 目标Java版本。决定适用哪些违规行为。 |
| 失败 | 布尔 | 错误的 | 检测到违规时的失败构建。 |
| 包括赛车 | 布尔 | 错误的 | 是否将搜索违规行为。 |
| 违规唱片 | 细绳 | 警告 | 在此级别记录违规行为。可能的值:错误,警告,信息,调试,跟踪 |
| 违规文件 | 细绳 | 无效的 | 用户指定的违规文件。覆盖标准违规检查。 |
| 违法者 | 细绳[] | [] | 用户指定的违规文件。覆盖violationsFile和标准检查。 |
| exclusionsfile | 细绳 | 无效的 | 禁用用户指定的违规行为。请参阅下面的格式描述。 |
| 排除 | 细绳[] | [] | 违反禁用。请参阅下面的格式描述。 |
| 排除模式 | 细绳[] | [] | 违规模式禁用。请参阅下面的格式描述。 |
| 忽略包装 | 细绳[] | [] | 包装前缀要忽略。请参阅下面的格式描述。 |
| nighoreclassnamepatterns | 细绳[] | [] | 完整的合格类名称(包含软件包)要忽略。请参阅下面的格式描述。 |
| 忽略菌级 | 布尔 | 真的 | 是否使用保留策略是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 ' Gradle Modernizer插件基本上是Modernizer Maven插件的包装纸。下表描述了它们之间的关系。
| Gradle Modernizer插件 | Modernizer Maven插件 |
|---|---|
| 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 Maven插件的默认版本。在toolVersion交换扩展”属性中指定所需版本。请注意:发生API时可能会破裂!
听起来很棒!但是,由于Modernizer Maven插件保留了违规规则列表,因此我自己无法自己添加。在那里打开一个问题并描述您的发现。
请注意,他们可能需要一些时间才能使用您的规则发布新版本。
这不是一个问题。不幸的是,我可能没有找到时间发布Gradle插件的新版本。
与此同时,您可以在toolVersion扩展”属性中指定所需版本。然后,Gradle插件将拾取请求的版本,如果API仍然相同,请使用它。
modernizer {
toolVersion = ' 1.10.0 '
}这取决于该功能是否特定于Gradle。如果是这样,那么我将看到我能做什么。但是,如果它需要在现代化器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.