Gradle Modernizer 플러그인은 최신 Java 버전이 대체하는 레거시 API의 사용을 감지합니다.
이 현대 API는 종종 레거시 동등성보다 성능이 뛰어나고 안전하며 관용적입니다. 예를 들어 Modernizer는 ArrayList 대신 Vector 의 사용을 String.getBytes(String) 대신 String.getBytes(Charset) 및 Java 7 Objects.equal 대신 Objects.equals 을 감지 할 수 있습니다. 기본 구성은 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.targetCompatibility} | 타겟 Java 버전. 어떤 위반이 적용되는지 결정합니다. |
| 실패 | 부울 | 거짓 | 위반이 감지되었을 때 실패. |
| includetestclasses | 부울 | 거짓 | 테스트 클래스가 위반을 검색할지 여부 |
| ViolationLoglevel | 끈 | 경고하다 | 이 수준에서 위반을 기록합니다. 가능한 값 : 오류, 경고, 정보, 디버그, 추적 |
| 위반 | 끈 | 널 | 사용자 지정 위반 파일. 표준 위반 점검을 무시합니다. |
| 위반 파일 | 끈[] | [] | 사용자 지정 위반 파일. violationsFile 및 표준 점검을 무시합니다. |
| 제외 파일 | 끈 | 널 | 사용자 지정 위반을 비활성화합니다. 아래 형식 설명을 참조하십시오. |
| 제외 | 끈[] | [] | 비활성화 할 위반. 아래 형식 설명을 참조하십시오. |
| 제외 패턴 | 끈[] | [] | 위반 패턴을 비활성화합니다. 아래 형식 설명을 참조하십시오. |
| 무시 패키지 | 끈[] | [] | 패키지 접두사를 무시할 수 있습니다. 아래 형식 설명을 참조하십시오. |
| 무시한 클라스 남미 | 끈[] | [] | 무시할 전체 자격을 갖춘 클래스 이름 (패키지 포함). 아래 형식 설명을 참조하십시오. |
| 무시한 클래스 | 부울 | 진실 | 보존 정책이 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 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.