maven eclipse checkstyle plugin

2019-02-17 22:47发布

I have custom checkstyle checks file (called checks.xml), and I'm trying to use that same file in both maven and eclipse. It all works well, except for the SuppressionFilter.

In this checks.xml file, I have

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

This works when I run through maven. However, when I run through eclipse, I need to change the config to be

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

If I run with the ${basedir} property with maven though, I get the error that property ${basedir} has not been set.

Is there a way use this same configuration file in both maven and eclipse? I feel like there should be, but I'm just missing something on how to properly populate the suppression filter.

thanks, Jeff

4条回答
冷血范
2楼-- · 2019-02-17 23:06

You could try defining ${basedir} as a property in your pom.
See the pom reference quick overview.

<property>
          <name>basedir</name>
          <value>${project.basedir}</value>
</property>
查看更多
Ridiculous、
3楼-- · 2019-02-17 23:08

<propertyExpansion>basedir=${session.executionRootDirectory}</propertyExpansion> works for me, but only when added to the <plugin>node, not to <execution>!

project.basedir does not work well in multi-module projects, because it will point to the submodule folder instead of the root folder.

查看更多
地球回转人心会变
4楼-- · 2019-02-17 23:10

Sure there is a way to use the same configuration file in both maven and eclipse but it requires a little setup first. I wrote a blog post on how to achieve this even for a multi-module maven project. see: maven-checkstyle-and-eclipse

查看更多
一纸荒年 Trace。
5楼-- · 2019-02-17 23:25

This is hell. Eclipse and Maven handle suppressions different and don't share variables. Derived from Rolf Engelhard

So in 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>

Now in checkstyle.xml (${config_log} is an Eclipse specific thing, but by specifying it in the pom we make it available to maven as well):

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

And if you're using maven-site-plugin or any other plugins that also rely on CheckStyle don't forget to update those to have the config_loc property as well (or declare it global to the pom, though I wasn't able to get this to work properly).

查看更多
登录 后发表回答