Plugin Gradle Modernizer mendeteksi penggunaan API lama yang digantikan versi Java modern.
API modern ini seringkali lebih banyak kinerja, lebih aman, dan idiomatik daripada yang setara dengan warisan. Misalnya, modernizer dapat mendeteksi penggunaan Vector alih -alih ArrayList , Objects.equals String.getBytes(String) alih -alih String.getBytes(Charset) , dan Objects.equal java. Konfigurasi default mendeteksi lebih dari 200 API lama, termasuk perpustakaan pihak ketiga seperti jambu biji.
Plugin Gradle ini sebenarnya adalah pembungkus di sekitar plugin Modernizer Maven sehingga fungsionalitas yang sama sekarang tersedia di Gradle Builds.
Untuk menggunakan plugin, sertakan dalam skrip build Anda:
// 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 '
} Jika Anda masih menggunakan ID plugin lama com.github.andygoossens.gradle-modernizer-plugin maka silakan beralih ke com.github.andygoossens.modernizer sebagai gantinya.
Jika Anda ingin memanggil tugas modernizer secara langsung:
./gradlew modernizer Sebagian besar waktu Anda tidak perlu menyebut tugas modernizer sendiri. Tugas mengetahui tempatnya di dalam siklus hidup build, dan itu akan mengeksekusi kapan pun dianggap perlu.
| Nama Properti | Jenis | Nilai default | Keterangan |
|---|---|---|---|
| alat | Rangkaian | Lihat tabel di bawah ini | Versi modernizer-maven-plugin yang akan digunakan. |
| Javaversion | Rangkaian | $ {Project.targetCompatibility} | Target versi java. Memutuskan pelanggaran mana yang akan berlaku. |
| Failonviolations | Boolean | PALSU | Gagal membangun ketika pelanggaran telah terdeteksi. |
| termasuk kelas | Boolean | PALSU | Apakah kelas tes akan dicari pelanggaran. |
| Pelanggaran Loglevel | Rangkaian | memperingatkan | Log pelanggaran di level ini. Nilai yang mungkin: Kesalahan, peringatkan, info, debug, jejak |
| Pelanggaran | Rangkaian | batal | File pelanggaran yang ditentukan pengguna. Menimpa pemeriksaan pelanggaran standar. |
| Langganan | Rangkaian[] | [] | File pelanggaran yang ditentukan pengguna. Menggantian violationsFile dan pemeriksaan standar. |
| Pengecualian | Rangkaian | batal | Menonaktifkan pelanggaran yang ditentukan pengguna. Lihat deskripsi format di bawah ini. |
| pengecualian | Rangkaian[] | [] | Pelanggaran untuk menonaktifkan. Lihat deskripsi format di bawah ini. |
| ExclusionPatterns | Rangkaian[] | [] | Pola pelanggaran untuk menonaktifkan. Lihat deskripsi format di bawah ini. |
| Ignorepackages | Rangkaian[] | [] | Paket awalan untuk diabaikan. Lihat deskripsi format di bawah ini. |
| Ignoreclassnamepatterns | Rangkaian[] | [] | Nama kelas penuh yang memenuhi syarat (termasuk paket) untuk diabaikan. Lihat deskripsi format di bawah ini. |
| Abaikan kelas yang diabaikan | Boolean | BENAR | Apakah kelas -kelas dijelaskan dengan anotasi yang kebijakan retensinya runtime atau class dan yang namanya sederhananya berisi "dihasilkan" akan diabaikan. |
| melewati | Boolean | PALSU | Apakah tugas harus dilewati. |
modernizer {
failOnViolations = true
includeTestClasses = true
}Perhatikan bahwa Anda hanya dapat mengonfigurasi plugin dalam proyek di mana plugin telah diterapkan. Lihat bagian "Penggunaan" di atas.
Ini adalah file teks dengan satu pengecualian per baris dalam format JAVAP.
Contoh:
java/lang/String.getBytes:(Ljava/lang/String;)[B
com/google/common/base/Function
sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B
Ini adalah daftar pengecualian. Setiap pengecualian harus dalam format JAVAP.
Contoh:
modernizer {
exclusions = [
' java/lang/String.getBytes:(Ljava/lang/String;)[B ' ,
' com/google/common/base/Function ' ,
' sun/misc/BASE64Decoder.decodeBuffer:(Ljava/lang/String;)[B ' ,
]
}Ini adalah daftar pola pengecualian. Setiap pengecualian harus menjadi ekspresi reguler yang cocok dengan format JAVAP dari pelanggaran.
Contoh:
modernizer {
exclusionPatterns = [
' java/lang/.* ' ,
]
}Ini adalah daftar awalan paket yang tidak akan dilaporkan oleh pelanggaran.
Mengabaikan paket akan mengabaikan semua anaknya. Menentukan foo.bar kemudian mengabaikan foo.bar.* , foo.bar.baz.* Dan sebagainya.
Contoh:
modernizer {
ignorePackages = [
' com.github.andygoossens ' ,
]
}Ini adalah daftar nama kelas penuh yang memenuhi syarat (termasuk paket) untuk diabaikan. Setiap pengecualian harus menjadi ekspresi reguler yang cocok dengan paket dan/atau kelas; Nama paket akan dipisahkan dipisahkan, tidak dipisahkan dot (format ASM).
Contoh:
modernizer {
ignoreClassNamePatterns = [
' .*MyLegacyClass ' ,
]
} Anda tidak dapat hanya mengabaikan elemen dengan menggunakan properti ekstensi (lihat di atas), Anda dapat menunjukkan bahwa plugin harus mengabaikan pelanggaran dalam kelas atau metode dengan menambahkan @SuppressModernizer ke elemen yang ingin Anda abaikan:
import org . gaul . modernizer_maven_annotations . SuppressModernizer ;
public class Example {
@ SuppressModernizer
public static void method () { /* your code here */ }
}Tambahkan ketergantungan berikut ke skrip Build Lulusan Anda:
// 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 ' Plugin Gradle Modernizer pada dasarnya adalah pembungkus di sekitar plugin Modernizer Maven. Tabel di bawah ini menjelaskan bagaimana mereka saling berhubungan.
| Plugin Gradle Modernizer | Plugin 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 |
Perhatikan bahwa Anda dapat mengganti versi default plugin Modernizer Maven yang akan digunakan. Tentukan versi yang diinginkan di properti toolVersion Extension. Perhatikan: Ini mungkin rusak saat ada perubahan API!
Kedengarannya bagus! Namun, saya tidak dapat menambahkannya sendiri sebagai Modernizer Maven Plugin mempertahankan daftar aturan pelanggaran. Buka masalah di sana dan jelaskan apa yang Anda temukan.
Perhatikan bahwa mungkin perlu waktu bagi mereka untuk merilis versi baru dengan aturan Anda.
Itu bukan pertanyaan. Sayangnya, saya mungkin tidak menemukan waktu untuk merilis versi baru plugin Gradle.
Sementara itu Anda dapat menentukan versi yang diinginkan di properti Extension toolVersion . Plugin Gradle kemudian akan mengambil versi yang diminta dan, jika API masih sama, gunakan.
modernizer {
toolVersion = ' 1.10.0 '
}Itu tergantung pada apakah fitur ini khusus untuk Gradle. Jika ya, maka saya akan melihat apa yang bisa saya lakukan. Namun, jika membutuhkan perubahan pada plugin Modernizer Maven, maka terserah pemelihara.
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.