3

我正在创建一个基于 maven 的 java 项目,其中包含 PMD maven 插件。我使用我自己的规则集 XML,它就像一个魅力,除了两个规则集:空代码不必要的:当我运行构建时,maven 说:“找不到资源”。角色定义如下所示:

<role ref="rulesets/emptycode" />

<role ref="rulesets/unnecessary" />

在其他所有情况下,这种定义都有效。我发现:在ecmasrcipt类别下有一个名为“不必要”的规则集,所以这个定义可能需要一些建议才能使用 java 版本。我尝试了多种想法,例如将语言属性设置为规则集xml 节点(“JAVA”,基于 PMD JavaDoc),以及ref中的一些前置后缀,但它不起作用,我在网络上找不到有效的解决方案。有人有什么想法,我忘了设置什么,或者我失败了什么?谢谢你的帮助!

4

1 回答 1

10

PMD 似乎是 Maven 使用的一个繁琐的野兽。我刚刚用 3.0 版插件解决了这个问题 - 有两种解决方案:

  • 快速而肮脏的解决方案:将规则集放入您的项目中:

    • 下载 PMD jar ( http://sourceforge.net/projects/pmd/files/latest/download )
    • 提炼lib/pmd-x.x.x.jar
    • 从该 PMD jar 文件中提取rulesets/<type>/<ruleset>.xml要使用的文件
    • 将它们放在项目下的文件夹中 - 类似于${basedir}/pmd/...
    • 参考它们如下:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
              <rulesets>
                  <ruleset>${basedir}/pmd/<ruleset>.xml</ruleset>
              </rulesets>
          </configuration>
      </plugin>
      

      优点是这很容易,缺点是如果您以后更新 PMD 版本,您需要记住更新这些文件。

  • 不错的解决方案:参考pmd-x.x.x.jar.

    • 创建一个自定义规则集,例如:(${basedir}/pmd/custom.xml参见http://pmd.sourceforge.net/pmd-5.0.2/howtomakearuleset.html
    • 通过以下方式引用 PMD 规则集:<rule ref="rulesets/java/imports.xml"/>
    • 注意:路径是里面的路径pmd-x.x.x.jar(见上面的快速和肮脏),没有前导斜杠
    • 参考您的自定义规则集,如下所示:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
              <rulesets>
                  <ruleset>${basedir}/pmd/custom.xml</ruleset>
              </rulesets>
          </configuration>
      </plugin>
      

      优点是这将始终从 PMD jar 中引用当前的 PMD 规则集,缺点是正确处理有点繁琐。

为了试验它直到它工作(maven-pmd-plugin版本 3.0),我一直运行 mvn pmd:pmd ( <linkXref>false</linkXref>in pom.xml) 并调整路径直到我停止出错。

于 2013-03-04T13:03:41.673 回答