【问题标题】:maven eclipse checkstyle pluginmaven eclipse checkstyle插件
【发布时间】:2011-04-28 06:09:00
【问题描述】:

我有自定义 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 中使用相同的配置文件?我觉得应该有,但我只是缺少有关如何正确填充抑制过滤器的内容。

谢谢, 杰夫

【问题讨论】:

  • 我认为我的建议无关紧要,因此我将其删除。

标签: eclipse maven-2 checkstyle


【解决方案1】:

这是地狱。 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 全局,尽管我无法使其正常工作)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢。您的博文非常清晰,解决了我花了太长时间研究的问题。
    【解决方案3】:

    &lt;propertyExpansion&gt;basedir=${session.executionRootDirectory}&lt;/propertyExpansion&gt; 对我有用,但仅当添加到 &lt;plugin&gt;node 时,而不是 &lt;execution&gt;

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

    【讨论】:

      【解决方案4】:

      您可以尝试将${basedir} 定义为您的 pom 中的属性。
      请参阅pom reference quick overview

      <property>
                <name>basedir</name>
                <value>${project.basedir}</value>
      </property>
      

      【讨论】:

      • basedir 已经是一个 Maven 属性。我在 maven checkstyle 配置中添加了一个 propertyExpansion 标记,上面写着 basedir=${basedir} ,这似乎可以解决问题。不过,我需要这样做似乎有点奇怪。
      • @Jeff - 这 1 行已经结束了我两天的痛苦。非常感谢!
      猜你喜欢
      • 2011-09-18
      • 2011-03-28
      • 2019-08-11
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2012-09-29
      相关资源
      最近更新 更多