2016-12-20 6 views
2

주석 유효성 검사 작업 방법을 배우기위한 간단한 프로젝트를 작성했습니다.JetBrains의 @NotNull은 IDEA에서 프로젝트를 빌드했을 때만 작동합니다.

<dependency> 
    <groupId>org.jetbrains</groupId> 
    <artifactId>annotations</artifactId> 
    <version>15.0</version> 
</dependency> 

을하고이 방법을 사용 : 내가 프로젝트를 빌드 할 때

public boolean add(@NotNull T entry){ ... 

을 그 puspose를 들어 는 I (또한 내가 나를 위해 작동하지 않는, javax.validation 시도) 받는다는 종속성을 추가 IDEA, 다 괜찮아요,하지만 maven 명령으로 코드를 컴파일 할 때 작동하지 않습니다. 디 컴파일 된 클래스 파일에서 IDEA가 다른 방식으로 클래스를 컴파일하는 것으로 나타났습니다. 다음 체크를 추가합니다 :

if (entry == null) { 
    $$$reportNull$$$0(0); 
} 

그리고 maven은 아닙니다.

내가 잘못하고 있니? Jetbrains 나 javax validation과 상관없이 어떻게 사용해야하는지 알려주세요.

+0

[복제시 @Nonnull 주석이 런타임에 확인되는 이유는 무엇입니까?] (http://stackoverflow.com/questions/40847472/why-nonnull-annotation-checked- at-runtime) –

+0

이것은 IntelliJ IDEA 2016.3 기능입니다 (별로 좋지 않음). –

답변

0

여기서 부분적으로 추측합니다 : 당신은 바이트 코드에 여분의 체크를 넣는 것은 "IDEA"가 아닙니다.

주석 : 코드를 생성 할 수 있습니다 (추가 정보는 here 참조). 그리고 그 링크에서 볼 수 있듯이; 코드 생성의 핵심은 다음과 같습니다. 해당 주석은 javax.annotation.processing.Processor 클래스를 필요로합니다. 그리고 그것은 컴파일러 에 의해 사용되어 소스 코드 주석을 바이트 코드 내에서 합리적인 것으로 바꿉니다.

내가 맞으면, 당신은 당신의 maven 컴파일을위한 javax 파트 셋업을 얻지 못했습니다. 그래서 아마 그 부분이 빠져있을 것입니다. 그래서 해결책은 필요한 모든 의존성을 제공하도록 maven 설정을 수정하는 것입니다.

0

@NotNull 주석은 IDEA의 코딩을 지원하도록 설계된 IntelliLang 플러그인의 일부인 것 같습니다 (계약 코딩의 도움). IDEA 밖에서도 사용할 수 있을지는 의문입니다.

언어 삽입 작업을 시작하기 전에 IntelliLang 플러그인이 활성화되어 있는지 확인하십시오. 플러그인 인 IntelliJ의 IDEA와 함께 제공됩니다 내가 다른 한편으로는 매우 다른 일에 설계에 너무 reference

javax.validation에게 인사하십시오, 그것에 대해 많이 몰라 기본

에 의해 활성화된다. 데이터 객체 내용이 유효한지 확인합니다. Bean Validation from Java EE