[java] 생성 된 코드와 같은 특정 디렉토리 또는 파일에 대한 Java 경고를 억제하는 방법

다소 못생긴 코드를 생성하는 파서 생성기를 사용하고 있습니다. 결과적으로 내 Eclipse 프로젝트에는 생성 된 소스 파일에서 발생하는 수십 개의 경고가 있습니다. @SuppressWarning주석을 사용하여 특정 요소의 특정 경고를 억제 할 수 있다는 것을 알고 있지만 수동으로 추가 한 주석은 파서 생성기가 다시 실행될 때 손실됩니다. 특정 파일 또는 디렉토리에 대한 경고를 억제하도록 Eclipse를 구성하는 방법이 있습니까?



답변

버전 3.8 M6부터 Eclipse (정확히 말하자면 JDT)에는이를위한 기능이 내장되어 있습니다. 프로젝트의 빌드 경로를 통해 구성 할 수 있습니다. 프로젝트 속성> Java 빌드 경로> 컴파일러> 소스

여기에 이미지 설명 입력

여기에 발표 : Eclipse 3.8 및 4.2 M6-New and Noteworthy , 소스 폴더의 오류 / 경고를 선택적으로 무시합니다 . 또한 스크린 샷의 출처이기도합니다. 이것은 이전에 링크 된 Bug 220928 에서 개발 된 새로운 기능입니다 .


답변

이것에 대한 티켓이 있습니다, Bug 220928이클립스 3.8 용으로 완료된 있습니다. 자세한 내용은 이 답변 을 참조하십시오.

Eclipse 3.7 이하를 사용하는 경우 : 해당 티켓에 대한 사용자 “Marc”가 다음에서 ‘warningcleaner’라는 플러그인을 만들었습니다 (또는 적어도 링크). 댓글 35 . 이 기능이 Eclipse에 통합되기를 기다리는 동안 많은 성공을 거두었습니다.

정말 간단합니다.

  1. 플러그인을 설치합니다.
  2. 프로젝트를 마우스 오른쪽 단추로 클릭하고 “생성 된 코드 특성 추가 / 제거”를 선택하십시오.
  3. 프로젝트 설정을 엽니 다 (마우스 오른쪽 버튼을 클릭하고 “속성”선택).
  4. ‘경고 클리너’탭을 엽니 다.
  5. 경고를 무시할 소스 폴더를 선택하십시오.

경고 클리너 스크린 샷


답변

maven regexp replace 플러그인을 사용하여이 문제를 해결했습니다. 원인은 해결되지 않지만 고통은 치유됩니다.

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>maven-replacer-plugin</artifactId>
  <version>1.3.2</version>
  <executions>
<execution>
  <phase>prepare-package</phase>
  <goals>
    <goal>replace</goal>
  </goals>
</execution>
  </executions>
  <configuration>
<includes>
  <include>target/generated-sources/antlr/**/*.java</include>
</includes>

<regex>true</regex>
<regexFlags>
  <regexFlag>MULTILINE</regexFlag>
</regexFlags>

<replacements>
  <replacement>
    <token>^public class</token>
    <value>@SuppressWarnings("all") public class</value>
  </replacement>
</replacements>
  </configuration>
</plugin>

** 표기법이 작동하도록 관리하지 않았으므로 경로를 정확하게 지정해야 할 수도 있습니다.

중복 @SupressWarnings를 생성하지 않는 방법에 대한 개선 사항은 아래 주석을 참조하십시오.


답변

나는 당신이 할 수있는 최선의 방법은 경고를 표시하기 위해 프로젝트 특정 설정을 활성화하는 것입니다.

창-> 환경 설정-> Java-> 컴파일러-> 오류 / 경고

양식 상단에는 프로젝트 별 설정을 구성하기위한 링크가 있습니다.


답변

사용자 @Jorn은이를 수행하기 위해 Ant 코드에서 암시했습니다. 여기에 내가 가진 것

<echo>Adding @SuppressWarnings("all") to ANTLR generated parser/lexer *.java</echo>
<echo> in ${project.build.directory}/generated-sources/antlr/</echo>
<replace dir="${project.build.directory}/generated-sources/antlr/"
         summary="true"
         includes="**/*.java"
         token="public class"
         value='@SuppressWarnings("all") public class' />

Ant의 <replace>는 정규식 대체가 아닌 텍스트 대체를 수행하므로 maven regexp replace 플러그인과 같이 토큰의 ^ 메타 문자를 사용하여 줄의 시작 부분을 일치시킬 수 없습니다.

ANTLR maven 플러그인이 Cobertura maven 플러그인과 잘 작동하지 않았기 때문에 Maven pom의 maven-antrun-plugin에서 Antlr를 실행하는 동시에이 작업을 수행하고 있습니다.

(나는 이것이 원래 질문에 대한 대답이 아니라는 것을 알고 있지만 주석 / 다른 대답에 대한 답변에서 Ant 코드를 형식화 할 수는 없으며 대답에서만)


답변

Eclipse가 본질적으로 디렉토리 수준에서이 작업을 수행하는 방법을 제공한다고 생각하지 않습니다 (하지만 확실하지 않습니다).

생성 된 파일을 별도의 Java 프로젝트로 이동하고 해당 특정 프로젝트에 대한 경고를 제어 할 수 있습니다.

나는 일반적으로 자동 생성 코드를 별도의 프로젝트에 배치하는 것을 선호합니다.


답변

프로젝트 수준에서만 경고를 억제 할 수 있습니다. 그러나 파일 또는 패키지에서 경고를 표시하지 않도록 문제 탭을 구성 할 수 있습니다. 컨텐츠 구성 메뉴로 이동하여 “작업 세트 :”범위로 작업하십시오.