我有一个 Maven 2 项目,我想配置我的 Checkstyle 报告插件,以便只分析我的一些类。我找到了该maven.checkstyle.excludes
属性,但尽管将其作为命令行参数(使用-D=maven.checkstyle.excludes=...
)传递,但我无法使其工作。我在插件文档页面上找不到任何内容。理想情况下,我希望能够在<configuration>
我的 POM 部分中进行设置。
4 回答
如果像我一样,您来到这里是为了寻找一种从 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:checkstyle
checkstyle 插件的目标使用${project.compileSourceRoots}
,它显然包括生成的源目录。
如果将其更改为${project.build.sourceDirectory}
,它将仅使用源目录,而不使用任何生成的源目录。
请注意,虽然<sourceDirectory>
已弃用,但替代方法 ,<sourceDirectories>
似乎不起作用。
编辑:在评论中,@Cyrusmith、@Ben 和 @Olivier Callioux 报告说,截至 2017 年,<sourceDirectories>
有效;我无法确认。
如果这个问题是关于 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
之间的审计事件(然后只需将这些评论添加到您不想检查的代码的类或部分中)。
此外,如果要排除多个独立文件夹,可以像这样添加多个独立路径逗号分隔
<excludes>org/log4j/*,com/acme/**/*,com/companyb/*</excludes>
上面的答案对我不起作用,因为我在 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>