
오류가 발생하기 쉬운 지원은 Google의 오류가 발생하기 쉬운 피크닉에 활발한 확장입니다. 코드 품질을 향상시키고 유지 관리, 일관성 및 일반적인 함정의 회피에 중점을 둡니다.
오류 prone은 컴파일 타임에 일반적인 프로그래밍 실수를 포착하는 Java의 정적 분석 도구입니다.
오류가 발생하기 쉬운 오류 (지원)에 대해 자세히 알아 보려면 실제로 오류가 발생하기 쉬운 오류 사용을 시작하는 방법과 피크닉에서 사용하는 방법에 대해서는 실제로 오류가 발생하기 쉬운 버그를 자동화하는 컨퍼런스 토크를보십시오. 또한 블로그 게시물 Pictic Loves Error Prone : 고품질의 일관된 Java 코드 생성을 확인하십시오.
시작하기 • 오류가 발생하기 쉬운 지원 • 작동 방식 • 기여
이 라이브러리는 오류가 발생하기 쉬운 위에 구축되었습니다. 이를 사용하려면 아래 Maven 또는 Gradle의 설치 안내서를 읽으십시오. 라이브러리는 JDK 17 이상을 사용하여 빌드를 실행해야하지만 이전 버전의 Java를 대상으로하는 빌드를 지원합니다.
먼저 Error Prone의 설치 안내서를 따르십시오.
다음으로 pom.xml 파일을 편집하여 maven-compiler-plugin 의 annotationProcessorPaths 에 하나 이상의 오류가 발생하기 쉬운 지원 모듈을 추가하십시오.
< build >
< pluginManagement >
< plugins >
< plugin >
< groupId >org.apache.maven.plugins</ groupId >
< artifactId >maven-compiler-plugin</ artifactId >
<!-- Prefer using the latest release. -->
< version >3.12.0</ version >
< configuration >
< annotationProcessorPaths >
<!-- Error Prone itself. -->
< path >
< groupId >com.google.errorprone</ groupId >
< artifactId >error_prone_core</ artifactId >
< version >${error-prone.version}</ version >
</ path >
<!-- Error Prone Support's additional bug checkers. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >error-prone-contrib</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
<!-- Error Prone Support's Refaster rules. -->
< path >
< groupId >tech.picnic.error-prone-support</ groupId >
< artifactId >refaster-runner</ artifactId >
< version >${error-prone-support.version}</ version >
</ path >
</ annotationProcessorPaths >
< compilerArgs >
< arg >
-Xplugin:ErrorProne
<!-- Add other Error Prone flags here. See
https://errorprone.info/docs/flags. -->
</ arg >
< arg >-XDcompilePolicy=simple</ arg >
</ compilerArgs >
<!-- Enable this if you'd like to fail your build upon warnings. -->
<!-- <failOnWarning>true</failOnWarning> -->
</ configuration >
</ plugin >
</ plugins >
</ pluginManagement >
</ build > 먼저 gradle-errorprone-plugin 의 설치 안내서를 따르십시오.
다음으로, build.gradle 파일을 편집하여 하나 이상의 오류가 발생하기 쉬운 지원 모듈을 추가하십시오.
dependencies {
// Error Prone itself.
errorprone( " com.google.errorprone:error_prone_core: ${ errorProneVersion } " )
// Error Prone Support's additional bug checkers.
errorprone( " tech.picnic.error-prone-support:error-prone-contrib: ${ errorProneSupportVersion } " )
// Error Prone Support's Refaster rules.
errorprone( " tech.picnic.error-prone-support:refaster-runner: ${ errorProneSupportVersion } " )
}
tasks . withType( JavaCompile ) . configureEach {
options . errorprone . disableWarningsInGeneratedCode = true
// Add other Error Prone flags here. See:
// - https://github.com/tbroyer/gradle-errorprone-plugin#configuration
// - https://errorprone.info/docs/flags
}다음 예제 코드를 고려하십시오.
import com . google . common . collect . ImmutableSet ;
import java . math . BigDecimal ;
public class Example {
static BigDecimal getNumber () {
return BigDecimal . valueOf ( 0 );
}
public ImmutableSet < Integer > getSet () {
ImmutableSet < Integer > set = ImmutableSet . of ( 1 );
return ImmutableSet . copyOf ( set );
}
}설치가 성공하면 Maven을 사용하여 위의 코드를 구축하면 두 개의 컴파일러 경고가 있습니다.
$ mvn clean install
...
[INFO] Example.java:[9,34] [Refaster Rule] BigDecimalRules.BigDecimalZero: Refactoring opportunity
(see https://error-prone.picnic.tech/refasterrules/BigDecimalRules#BigDecimalZero)
Did you mean ' return BigDecimal.ZERO; ' ?
...
[WARNING] Example.java:[13,35] [IdentityConversion] This method invocation appears redundant ; remove it or suppress this warning and add a comment explaining its purpose
(see https://error-prone.picnic.tech/bugpatterns/IdentityConversion)
Did you mean ' return set; ' or ' @SuppressWarnings("IdentityConversion") public ImmutableSet<Integer> getSet() { ' ?
...여기서 두 가지가 차고 있습니다.
BugChecker .BigDecimal.valueOf(0) 및 BigDecimal.ZERO 에서 new BigDecimal(0) 의 표현식을 다시 작성할 수있는 리스터 규칙.모든 버그 검사 및 리퍼스터 규칙을 확인하십시오.
이 프로젝트는 Maven 프로젝트이므로 mvn clean install 실행하면 완전히 깨끗한 빌드를 수행하고 라이브러리를 로컬 Maven 저장소에 설치합니다.
변경 한 후에는 정적 코드 분석에 의해 방출 된 경고 또는 오류로 인해 빌드가 실패 할 수 있습니다. 아래에 나열된 플래그 및 명령을 사용하면 해당 사례를 자동으로 수정하거나 자동으로 수정할 수 있습니다. 사용 가능한 옵션을주의 깊게 확인하십시오. 이로 인해 상당한 양의 개발 시간을 절약 할 수 있습니다!
관련 Maven 빌드 매개 변수 :
-Dverification.warn 가능한 경우 다양한 플러그인과 Java 컴파일러에 의해 경고 및 오류를 방출합니다.-Dverification.skip 다양한 비 필수 플러그인을 비활성화하고 최소한의 점검으로 코드를 컴파일합니다 (예 : 라인, 오류가 발생하기 쉬운 점검 등).-Dversion.error-prone=some-version 의 오류가 발생하기 쉬운 버전을 사용하여 빌드를 실행합니다. 이것은 로컬로 제작 된 오류가 발생하기 쉬운 스냅 샷을 테스트 할 때 유용합니다.-Perror-prone-fork Jitpack에서 호스팅 된 피크닉의 오류가 발생하기 쉬운 포크를 사용하여 빌드를 실행합니다. 이 포크에는 일반적으로 최신 오류가 발생하기 쉬운 릴리스 위에 몇 가지 변경 사항이 포함되어 있습니다.-Pself-check 프로젝트에 의해 정의 된 수표를 그 자체로 실행합니다. Google/Error Prone#3301의 릴리스가 보류 중이 면서이 플래그는 현재 -Perror-prone-fork 와 함께 사용해야합니다.다른 고도로 관련된 명령 :
mvn fmt:format 형식 google-java-format 사용하여 코드를 형식화합니다../run-full-build.sh 프로젝트를 두 번 구축합니다. 여기서 두 번째 패스는 피크닉의 오류가 발생하기 쉬운 포크 와이 프로젝트 내에서 정의 된 모든 규칙과 코드 준수와의 호환성을 검증합니다. (PR 수표 도이 유효성 검사를 수행하므로 풀 요청을 열기 전에이를 실행하는 것을 고려하십시오.)./apply-error-prone-suggestions.sh 이 프로젝트에 오류가 발생하기 쉬운 오류 및 오류가 발생하기 쉬운 지원 코드 제안을 적용합니다. 이 명령을 실행하기 전에 프로젝트 ( mvn clean install )를 설치하고 현재 작업 디렉토리에 무대가 없거나 누락되지 않은 변경 사항이 포함되어 있지 않은지 확인하십시오../run-branch-mutation-tests.sh Pitest를 사용하여 업스트림 기본 브랜치에 비해 수정 된 코드에 대해 돌연변이 테스트를 실행합니다. 결과는 해당 target/pit-reports/index.html 파일을 열어 검토 할 수 있습니다. ./run-mutation-tests.sh 사용하여 현재 작업 디렉토리의 모든 코드에 대해 돌연변이 테스트를 실행할 수 있습니다. 자세한 내용은 Pit Maven 플러그인을 확인하십시오.Intellij Idea에서 프로젝트의 테스트를 실행할 때 다음과 같은 오류가 표시 될 수 있습니다.
java: exporting a package from system module jdk.compiler is not allowed with --release
이 경우 설정 -> 빌드, 실행, 배포 -> 컴파일러 -> Java 컴파일러 로 이동하여 크로스 컴파일을위한 옵션 사용 ' -reelease'옵션 (Java 9 이상) . 자세한 내용은 Idea-288052를 참조하십시오.
이 프로젝트는 추가 BugChecker 구현을 제공합니다.
버그를보고하거나 수정하거나 새 기능을 제안하거나 추가하거나 문서를 개선하려고합니까? 굉장 해요! 기여 가이드 라인을 읽으십시오.
보안 취약점을보고하려면 개인 채널을 통해 그렇게하십시오. 자세한 내용은 보안 정책을 참조하십시오.