如何在Maven中为所有模块使用单个checkstyle抑制文件

时间:2009-09-03 15:14:33

标签: java maven-2 build maven-plugin

我有一个由几个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 中找到该文件,这确实有意义。
我确信必须有一个我缺少的简单解决方案,但是有没有办法定义这个位置,以便所有子模块都使用父位置而不用硬编码呢?

4 个答案:

答案 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中属性指定的位置,然后始终引用它在那个地方。