如何禁止特定目录或文件(如生成的代码)的Java警告

问题描述 投票:110回答:13

我正在使用解析器生成器,该生成器会创建难看的代码。结果,我的Eclipse项目从生成的源文件发出了几十条警告。我知道我可以使用@SuppressWarning注释来抑制特定元素中的特定警告,但是当解析器生成器再次运行时,我手工添加的任何注释都将丢失。有没有一种方法可以配置Eclipse以禁止显示特定文件或目录的警告?

java eclipse suppress-warnings generated-code
13个回答
91
投票

从3.8 M6版本开始,Eclipse(确切地说是JDT)为此提供了内置功能。可通过项目的构建路径进行配置:项目属性> Java构建路径>编译器>源代码

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS93TG1LcS5wbmcifQ==” alt =“在此处输入图像描述”>

此处宣布:Eclipse 3.8 and 4.2 M6 - New and Noteworthy,称为选择性地忽略源文件夹中的错误/警告。这也是屏幕截图的来源。这是在先前链接的Bug 220928上开发的新功能。


20
投票

有一张票证Bug 220928,此票证已针对Eclipse 3.8完成。有关详细信息,请参见this answer

[如果您使用的是Eclipse 3.7或更低版​​本:在该故障单上发表评论的用户“ Marc”在comment 35中创建了(或至少链接到)名为“ warningcleaner”的插件。在等待将此功能集成到Eclipse时,我已经成功地使用了它。

真的很简单:

  1. 安装插件。
  2. 右键单击项目,然后选择“添加/删除生成的代码性质”。
  3. 打开项目设置(右键单击并选择“属性”)。
  4. 打开选项卡'警告清洁剂'。
  5. 选择要忽略其警告的源文件夹。

“警告清理器屏幕截图”


18
投票

我使用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的改进


7
投票

我认为您能做的最好是启用项目特定的设置以显示警告。

窗口->首选项-> Java->编译器->错误/警告

在表单顶部是用于配置项目特定设置的链接。


4
投票

用户@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的进行文本替换,而不是正则表达式替换,因此它不能像maven regexp replace插件那样使用令牌中的^元字符来匹配行首。

我在从Maven pom中的maven-antrun-plugin运行Antlr的同时,因为ANTLR maven插件不能与Cobertura maven插件一起很好地运行。

((我意识到这不是原始问题的答案,但是我不能在注释中/仅对一个答案答复/回答另一个答案的格式)。”>


1
投票

我不认为Eclipse固有地提供了在目录级别执行此操作的方法(但我不确定)。>>

您可以将生成的文件放入一个单独的Java项目中,并控制该特定项目的警告。


1
投票

您只能在项目级别禁止显示警告。但是,您可以配置“问题”选项卡以禁止来自文件或软件包的警告。进入“配置目录”菜单,然后使用“在工作集上”范围。


1
投票

我正在执行一些ANTLR语法,这些语法使用Ant生成Java解析器。 Ant构建脚本将@SuppressWarnings("all")添加到一个Java文件,将@Override添加到另一个Java文件。如果您有兴趣,我可以仔细查看它的完成方式。


1
投票

此小python脚本“修补” M2E生成的.classpath文件,并将所需的XML标记添加到以target/generated-sources开头的所有源文件夹中。您可以从项目的根文件夹运行它。显然,当从M2E重新生成Eclipse项目信息时,您需要重新运行它。显然,一切后果自负;-)


0
投票

[对于ANTLR 2,可以通过在语法文件中的类声明之前附加@SuppressWarnings来抑制生成的代码中的警告,例如


0
投票

这可以通过从构建路径中排除某些目录来完成(以下示例使用Eclipse 3.5给出) [1]提出Java构建路径


0
投票

自从我发布了警告清理器插件已有一段时间了,现在我正在使用Eclipse 3.8,所以我不再需要它了。但是,对于仍然需要此插件的人,我已在bintray上的更新站点上将其发布在github上。如果您仍在使用Eclipse 3.7或更低版​​本,这可能会很有用。检查this site以获取安装详细信息。


0
投票

如果日食项目是使用Eclipse plugin's eclipse命令从gradle生成的,则Selectively ignore errors/warnings from source folders选项可以这样设置(假设生成的源位于build/generated/parser文件夹中:

© www.soinside.com 2019 - 2024. All rights reserved.