다소 못생긴 코드를 생성하는 파서 생성기를 사용하고 있습니다. 결과적으로 내 Eclipse 프로젝트에는 생성 된 소스 파일에서 발생하는 수십 개의 경고가 있습니다. @SuppressWarning
주석을 사용하여 특정 요소의 특정 경고를 억제 할 수 있다는 것을 알고 있지만 수동으로 추가 한 주석은 파서 생성기가 다시 실행될 때 손실됩니다. 특정 파일 또는 디렉토리에 대한 경고를 억제하도록 Eclipse를 구성하는 방법이 있습니까?
다소 못생긴 코드를 생성하는 파서 생성기를 사용하고 있습니다. 결과적으로 내 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에 통합되기를 기다리는 동안 많은 성공을 거두었습니다.
정말 간단합니다.
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를 생성하지 않는 방법에 대한 개선 사항은 아래 주석을 참조하십시오.
^(@SuppressWarnings\(.*?\)\s+)?public class
.. 패턴에 주석을 포함하면 이미있는 경우 복제되지 않습니다.
${basedir}/
전 태그 에 추가 해야 target
했습니다 <include>
. 약간 버벅 거림 느낌이 들지만 생성 된 파일에서만 작동하므로 가져갈 게요!
사용자 @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 코드를 형식화 할 수는 없으며 대답에서만)
프로젝트 수준에서만 경고를 억제 할 수 있습니다. 그러나 파일 또는 패키지에서 경고를 표시하지 않도록 문제 탭을 구성 할 수 있습니다. 컨텐츠 구성 메뉴로 이동하여 "작업 세트 :"범위로 작업하십시오.
이 작은 Python 스크립트는 M2E에서 생성 된 .classpath
파일을 "패치" 하고 필요한 XML 태그를로 시작하는 모든 소스 폴더에 추가합니다 target/generated-sources
. 프로젝트의 루트 폴더에서 실행할 수 있습니다. Eclipse 프로젝트 정보가 M2E에서 다시 생성 될 때 당연히 다시 실행해야합니다. 그리고 당연히 당신의 책임하에 ;-)
#!/usr/bin/env python
from xml.dom.minidom import parse
import glob
import os
print('Reading .classpath files...')
for root, dirs, files in os.walk('.'):
for name in files:
if (name == '.classpath'):
classpathFile = os.path.join(root, name)
print('Patching file:' + classpathFile)
classpathDOM = parse(classpathFile)
classPathEntries = classpathDOM.getElementsByTagName('classpathentry')
for classPathEntry in classPathEntries:
if classPathEntry.attributes["path"].value.startswith('target/generated-sources'):
# ensure that the <attributes> tag exists
attributesNode = None;
for attributes in classPathEntry.childNodes:
if (attributes.nodeName == 'attributes'):
attributesNode = attributes
if (attributesNode == None):
attributesNode = classpathDOM.createElement('attributes')
classPathEntry.appendChild(attributesNode)
# search if the 'ignore_optional_problems' entry exists
hasBeenSet = 0
for node in attributesNode.childNodes:
if (node.nodeName == 'attribute' and node.getAttribute('name') == 'ignore_optional_problems'):
# it exists, make sure its value is true
node.setAttribute('value','true')
#print(node.getAttribute('name'))
hasBeenSet = 1
if (not(hasBeenSet)):
# it does not exist, add it
x = classpathDOM.createElement("attribute")
x.setAttribute('name','ignore_optional_problems')
x.setAttribute('value','true')
attributesNode.appendChild(x)
try:
f = open(classpathFile, "w")
classpathDOM.writexml(f)
print('Writing file:' + classpathFile)
finally:
f.close()
print('Done.')
Ant를 사용하여 Java 파서를 생성하는 몇 가지 ANTLR 문법에 대해이 작업을 수행하고 있습니다. Ant 빌드 스크립트는 @SuppressWarnings("all")
을 하나의 Java 파일에 추가하고 다른 파일 @Override
의 몇 가지 메소드에 추가합니다. 관심이 있으시면 정확히 어떻게되었는지 찾아 볼 수 있습니다.
이것은 빌드 경로에서 특정 디렉토리를 제외하여 수행 할 수 있습니다 (다음 예제는 Eclipse 3.5를 사용하여 제공됨).
[1] Java 빌드 경로 가져 오기
[2] 제외 할 디렉토리 추가
Eclipse 플러그인의 eclipse
명령을 사용하여 gradle에서 Eclipse 프로젝트를 생성하는 경우 파일 Selectively ignore errors/warnings from source folders
의 최상위 수준에 다음을 추가 하여 옵션을 설정할 수 있습니다 build.gradle
.
eclipse.classpath.file {
whenMerged { classpath ->
classpath.entries.each { entry ->
if (entry.path.contains('build/generated/parser')) {
entry.entryAttributes['ignore_optional_problems'] = true
}
}
}
}
생성 된 소스가 build/generated/parser
폴더에 있다고 가정 합니다.