Maven Eclipse Checkstyle插件

7

我有一个自定义的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中同时使用这个配置文件呢?我感觉应该是可以的,但我可能不知道如何正确地填充抑制过滤器。
谢谢, Jeff

我认为我的建议并不相关,所以我将其删除了。 - Pascal Thivent
4个回答

8

这真是太头疼了。Eclipse和Maven处理抑制方式不同,也不共享变量。

源自于Rolf Engelhard

因此,在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全局属性,尽管我无法使其正常工作)。


6

当然有一种方法可以在maven和eclipse中同时使用相同的配置文件,但需要进行一些设置。我写了一篇博客文章,介绍如何实现即使是多模块maven项目也能够做到这一点。请参见:maven-checkstyle-and-eclipse


非常感谢。你的博客文章非常清晰,解决了我花费太长时间研究的问题。 - John Duskin

1
"

<propertyExpansion>basedir=${session.executionRootDirectory}</propertyExpansion> 对我有效,但只有在<plugin>节点中添加,而不是在<execution>中添加!

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

"

-2
你可以尝试在你的pom文件中将${basedir}定义为一个属性。
请参阅pom reference quick overview
<property>
          <name>basedir</name>
          <value>${project.basedir}</value>
</property>

5
basedir已经是Maven属性。我已经在Maven checkstyle配置中添加了一个propertyExpansion标签,内容为<propertyExpansion>basedir=${basedir}</propertyExpansion>,看起来这样做就可以了。不过,这似乎有点奇怪,我需要这样做。 - Jeff Storey
@Jeff - 那一行代码结束了我两天的痛苦。非常感谢! - Sripathi Krishnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接