6

我有自定义 checkstyle 检查文件(称为 checks.xml),我试图在 Maven 和 Eclipse 中使用相同的文件。一切都很好,除了SuppressionFilter.

在这个 checks.xml 文件中,我有

<module name="SuppressionFilter">
    <property name="file" value="src/main/resources/checkstyle/checkstyle-suppressions.xml"/>    
</module>

这在我运行 Maven 时有效。但是,当我通过 Eclipse 运行时,我需要将配置更改为

<module name="SuppressionFilter">
    <property name="file" value="${basedir}/src/main/resources/checkstyle/checkstyle-suppressions.xml"/>    
</module>

如果我使用 maven 使用 ${basedir} 属性运行,我会收到属性 ${basedir} 尚未设置的错误。

有没有办法在 Maven 和 Eclipse 中使用相同的配置文件?我觉得应该有,但我只是错过了如何正确填充抑制过滤器的东西。

谢谢,杰夫

4

4 回答 4

7

这是地狱。Eclipse 和 Maven 处理不同的抑制并且不共享变量。源自罗尔夫·恩格尔哈德

所以在 pom.xml 中:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>2.8</version>
   <configuration>
     <propertyExpansion>config_loc=${basedir}/src/main/checkstyle</propertyExpansion>
     <configLocation>${basedir}/src/main/checkstyle/checkstyle.xml</configLocation>
      <suppressionsLocation>${basedir}/src/main/checkstyle/suppressions.xml</suppressionsLocation>
     <includeTestSourceDirectory>true</includeTestSourceDirectory>
   </configuration>
   <executions>
     <execution>
       <phase>verify</phase>
       <goals>
         <goal>check</goal>
       </goals>
     </execution>
   </executions>
 </plugin>

现在在 checkstyle.xml 中(${config_log} 是 Eclipse 特定的东西,但是通过在 pom 中指定它,我们也可以使它对 maven 可用):

<module name="SuppressionFilter">
  <property name="file" value="${config_loc}/suppressions.xml" />
</module>

如果您正在使用maven-site-plugin或任何其他也依赖 CheckStyle 的插件,请不要忘记更新那些也具有 config_loc 属性(或将其声明为 pom 全局,尽管我无法使其正常工作)。

于 2012-05-24T04:16:43.250 回答
6

当然有一种方法可以在 Maven 和 Eclipse 中使用相同的配置文件,但首先需要进行一些设置。我写了一篇关于如何实现这一点的博客文章,即使对于多模块 maven 项目也是如此。见:maven-checkstyle-and-eclipse

于 2010-12-18T21:20:16.593 回答
1

<propertyExpansion>basedir=${session.executionRootDirectory}</propertyExpansion>对我有用,但仅在添加到<plugin>节点时才有效,而不是<execution>

project.basedir在多模块项目中效果不佳,因为它会指向子模块文件夹而不是根文件夹。

于 2015-11-14T18:00:46.087 回答
-2

您可以尝试${basedir}在 pom.xml 中定义为属性。
请参阅pom 参考快速概述

<property>
          <name>basedir</name>
          <value>${project.basedir}</value>
</property>
于 2010-10-20T20:11:46.957 回答