在Maven Checkstyle插件报告中排除类

And*_*Law 38 java maven-2 checkstyle

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

dre*_*rew 53

如果像我一样,你来到这里寻找一种从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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这也适用于我(mvn 3.5.2,maven-checkstyle-plugin 2.17,checkstyle 8.7):&lt;sourceDirectories&gt; &lt;sourceDirectory&gt;${project.build.sourceDirectory}&lt;/sourceDirectory&gt; &lt;sourceDirectory&gt;${project.build.testSourceDirectory }&lt;/sourceDirectory&gt; &lt;/sourceDirectories&gt; (3认同)

Pas*_*ent 44

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

-Dexcludes=**/generated/**/*
Run Code Online (Sandbox Code Playgroud)

或者在插件配置中进行设置:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <configuration>
       <excludes>**/generated/**/*</excludes>
   </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这样做的问题在于它不能用于例如**/target/** - 我认为因为排除是在源或资源的相对非绝对路径上检查的.要完全排除任何生成的代码,而不依赖于任何包约定,<sourceDirectory> $ {project.build.sourceDirectory}是唯一的解决方案.要完全排除资源,使用包含<suppress files ="[/ \\] target [/ \\]"的XML的SuppressionFilter检查=".*"/>似乎是唯一的方法(https://上的完整示例) git.opendaylight.org/gerrit/#/c/48715/) (7认同)
  • 这行不通。`&lt;excludes&gt;`路径模式不适用于基本目录,生成目录是其中的一部分。 (3认同)
  • 好吧,打那个。通常,`generated` 目录是基本目录的一部分,因此,在它上面使用 `&lt;excludes&gt;` 是行不通的。但是,如果您碰巧有包含“生成”包的源代码,那么它会。 (2认同)

Chr*_*ren 21

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

<excludes>org/log4j/*,com/acme/**/*,com/companyb/*</excludes>
Run Code Online (Sandbox Code Playgroud)


fl0*_*l0w 8

上面的答案对我不起作用,因为我在 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>
   [...]
Run Code Online (Sandbox Code Playgroud)

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

<?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>
Run Code Online (Sandbox Code Playgroud)