我有一个由几个Maven模块组成的项目,这些模块都是父模块的子模块。 我让父设置使用checkstyle,子模块都正确地继承了这种行为。我希望所有子模块都使用其插件中定义的父抑制文件。 我定义了一个在checkstyle插件中使用的属性 checkstyle.suppression
<properties>
<checkstyle.suppressions>${basedir}\src\checkstyle\suppressions.xml</checkstyle.suppressions>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.2</version>
<configuration>
<configLocation>config/sun_checks.xml</configLocation>
<suppressionsLocation>${checkstyle.suppressions}</suppressionsLocation>
<suppressionsFileExpression>${checkstyle.suppressions}</suppressionsFileExpression>
</configuration>
</plugin>
</plugins>
哪个适用于父级,但所有子模块都尝试在 basedir 中找到该文件,这确实有意义。
我确信必须有一个我缺少的简单解决方案,但是有没有办法定义这个位置,以便所有子模块都使用父位置而不用硬编码呢?
答案 0 :(得分:11)
上述答案很危险。我认为每个项目都应该是自包含的,因此引用它外部的文件迟早会破坏构建。 Checkstyle可以获取文件的URL,但这意味着您无法离线构建。更好的方法是将文件打包(也可以添加pmd.xml)到jar中,然后将该jar添加到checkstyle(或pmd)插件的类路径中。我有一个例子here以及有关覆盖插件类路径的更多信息here
答案 1 :(得分:2)
插件的文档在这里提到了一个类似的用例: http://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html
答案 2 :(得分:0)
您是否尝试在父pom中定义这样的属性或者在子代中重新定义它?
<properties>
<checkstyle.suppressions>${parent.project.basedir}\src\checkstyle\suppressions.xml</checkstyle.suppressions>
</properties>
答案 3 :(得分:0)
如果父母不打算运行checkstyle,您可能只能将其重写为
<properties>
<checkstyle.suppressions>..\..\src\checkstyle\suppressions.xml</checkstyle.suppressions>
</properties>
或类似的东西。或者您可以在settings.xml中放置一些内容,将所有内容指向系统范围的配置目录。
虽然可能不推荐使用,但您可以使用boot-strap或设置项目或任务将suppressions.xml文件的副本放入settings.xml中属性指定的位置,然后始终引用它在那个地方。