Answers:
从3.8 M6版本开始,Eclipse(确切地说是JDT)为此提供了内置功能。可通过项目的构建路径进行配置:项目属性> Java构建路径>编译器>源
此处宣布:Eclipse 3.8和4.2 M6-全新且值得注意,称为“ 选择性忽略源文件夹中的错误/警告”。这也是屏幕截图的来源。这是先前链接的Bug 220928上开发的新功能。
此后有一张票证Bug 220928,此票证已针对Eclipse 3.8完成。请参阅此答案以获取详细信息。
如果你坚持使用Eclipse 3.7或更低:用户“马克”评论创建的票(或至少指向)一个名为“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插件那样使用令牌中的^元字符来匹配行首。
在执行此操作的同时,我从Maven pom中的maven-antrun-plugin运行Antlr,因为ANTLR maven插件不能与Cobertura maven插件配合使用。
(我意识到这不是原始问题的答案,但是我无法在注释/答复其他答案中格式化Ant代码的格式,只能在答案中)
您只能在项目级别禁止显示警告。但是,您可以配置“问题”选项卡以禁止来自文件或软件包的警告。进入“配置目录”菜单,然后使用“在工作集上”范围。
我正在执行一些ANTLR语法,这些语法使用Ant生成Java解析器。Ant构建脚本将添加@SuppressWarnings("all")
到一个Java文件,并添加到另一个Java文件@Override
。如果您有兴趣的话,我可以查看一下它是如何完成的。
这个小型的python脚本“修补”了M2E生成的.classpath
文件,并将所需的XML标记添加到以开头的所有源文件夹中target/generated-sources
。您可以从项目的根文件夹运行它。显然,当从M2E重新生成Eclipse项目信息时,您需要重新运行它。显然,一切后果自负;-)
#!/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.')
在ANTLR 2的情况下,可以通过@SuppressWarnings
在语法文件中的类声明之前附加来抑制生成的代码中的警告,例如
{@SuppressWarnings("all")} class MyBaseParser extends Parser;
如果eclipse项目是使用Eclipse插件的 eclipse
命令从gradle生成的,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
文件夹中。