Gradle Modernizerプラグインは、現代のJavaバージョンが優先するレガシーAPIの使用を検出します。
これらの最新のAPIは、多くの場合、レガシーの相当量よりもパフォーマンスが高く、より安全で、慣用的です。たとえば、Modernizerは、 String.getBytes(String) charset)、およびguava Objects.equalの代わりにObjects.equals ArrayList 、 String.getBytes(Charset) string)の代わりにVectorの使用を検出できます。デフォルトの構成は、Guavaのようなサードパーティライブラリを含む200を超えるレガシーAPIを検出します。
この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 '
}古いプラグインID com.github.andygoossens.gradle-modernizer-pluginを使用している場合は、代わりにcom.github.andygoossens.modernizerに切り替えてください。
modernizerタスクを直接呼び出したい場合:
./gradlew modernizerほとんどの場合、 modernizerを自分で呼ぶ必要はありません。タスクは、ビルドライフサイクル内のその場所を知っており、必要とみなされるたびに実行されます。
| プロパティ名 | タイプ | デフォルト値 | 説明 |
|---|---|---|---|
| ツールバージョン | 弦 | 以下の表を参照してください | 使用されるModernizer-Maven-Pluginのバージョン。 |
| Javaversion | 弦 | $ {project.targetCompativelive} | ターゲットJavaバージョン。どの違反が適用されるかを決定します。 |
| faileonviolations | ブール | 間違い | 違反が検出されたときに失敗します。 |
| includetEstClasses | ブール | 間違い | テストクラスが違反を検索するかどうか。 |
| 違反Loglevel | 弦 | 警告 | このレベルで違反を記録します。考えられる値:エラー、ワーン、情報、デバッグ、トレース |
| 違反ファイル | 弦 | ヌル | ユーザー指定違反ファイル。標準違反チェックをオーバーライドします。 |
| 違反ファイル | 弦[] | [] | ユーザー指定違反ファイル。 violationsFileと標準チェックを無効にします。 |
| 除外ファイル | 弦 | ヌル | ユーザーが指定した違反を無効にします。以下の形式の説明を参照してください。 |
| 除外 | 弦[] | [] | 無効にする違反。以下の形式の説明を参照してください。 |
| exclusionPatterns | 弦[] | [] | 無効にする違反パターン。以下の形式の説明を参照してください。 |
| IngrorePackages | 弦[] | [] | 無視するパッケージプレフィックス。以下の形式の説明を参照してください。 |
| Ingreclassnamepatterns | 弦[] | [] | 無視する完全な資格のあるクラス名(パッケージを含む)。以下の形式の説明を参照してください。 |
| IngroreGeneratedClasses | ブール | 真実 | 保持ポリシーがruntimeまたはclassであり、単純な名前が「生成」を含む注釈が注釈が付けられているかどうかは無視されます。 |
| スキップ | ブール | 間違い | タスクをスキップすべきかどうか。 |
modernizer {
failOnViolations = true
includeTestClasses = true
}プラグインが適用されているプロジェクトのプラグインのみを構成できることに注意してください。上記の「使用法」セクションを参照してください。
これは、Javap形式で行ごとに1つの除外を備えたテキストファイルです。
例:
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を無視したい要素に@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 |
使用されるモダンイザーMavenプラグインのデフォルトバージョンをオーバーライドできることに注意してください。 toolVersion Extensionプロパティで目的のバージョンを指定します。注意してください:APIの変更があるときにこれは壊れる可能性があります!
いいですね!ただし、Modernizer Mavenプラグインが違反ルールのリストを維持しているため、自分で追加することはできません。そこに問題を開き、見つけたものを説明してください。
彼らがあなたのルールを使用して新しいバージョンをリリースするのに時間がかかるかもしれないことに注意してください。
それは質問ではありません。残念ながら、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.