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.