46

我有一个 Maven 2 项目,我想配置我的 Checkstyle 报告插件,以便只分析我的一些类。我找到了该maven.checkstyle.excludes属性,但尽管将其作为命令行参数(使用-D=maven.checkstyle.excludes=...)传递,但我无法使其工作。我在插件文档页面上找不到任何内容。理想情况下,我希望能够在<configuration>我的 POM 部分中进行设置。

4

4 回答 4

66

如果像我一样,您来到这里是为了寻找一种从 checkstyle中排除生成源的方法,请执行以下操作:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-checkstyle-plugin</artifactId>
  <version>2.15</version>
  <configuration>
    <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
  </configuration>
</plugin>

默认情况下,checkstyle:checkstylecheckstyle 插件的目标使用${project.compileSourceRoots},它显然包括生成的源目录。

如果将其更改为${project.build.sourceDirectory},它将仅使用源目录,而不使用任何生成的源目录。

请注意,虽然<sourceDirectory>已弃用,但替代方法 ,<sourceDirectories>似乎不起作用。

编辑:在评论中,@Cyrusmith、@Ben 和 @Olivier Callioux 报告说,截至 2017 年,<sourceDirectories>有效;我无法确认。

于 2015-05-22T21:59:05.610 回答
52

如果这个问题是关于 Maven 2 的,那么该属性是excludes并且采用逗号分隔的 Ant 模式列表。所以要么在命令行上传递这个:

-Dexcludes=**/generated/**/*

或者在插件配置中设置:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <configuration>
       <excludes>**/generated/**/*</excludes>
   </configuration>
</plugin>

另一种选择是使用抑制过滤器

例如,您可以使用SuppressionCommentFilter抑制包含评论CHECKSTYLE:OFF和包含评论CHECKSTYLE:ON之间的审计事件(然后只需将这些评论添加到您不想检查的代码的类或部分中)。

于 2010-03-02T11:30:26.833 回答
25

此外,如果要排除多个独立文件夹,可以像这样添加多个独立路径逗号分隔

<excludes>org/log4j/*,com/acme/**/*,com/companyb/*</excludes>
于 2012-03-20T22:49:15.980 回答
5

上面的答案对我不起作用,因为我在 maven 中运行代码生成,它还将目标/生成添加为源目录。

以下解决方案有效:您必须使用显式 checkstyle-suppressions.xml 配置文件并从您的配置中激活它:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-checkstyle-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
      <configLocation>checkstyle.xml</configLocation>
      <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
   [...]

排除目标文件夹的抑制文件如下所示:

<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
  "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
  "https://checkstyle.org/dtds/suppressions_1_2.dtd">

<suppressions>
  <suppress files="[/\\]target[/\\]" checks=".*" />
</suppressions>
于 2020-06-09T10:05:49.620 回答