我正在创建一个基于maven的java项目,其中包含PMD maven插件。我使用自己的规则集XML,它就像一个魅力,除了两个规则集:空码和不必要:当我运行构建时,maven说:&# 34; 无法找到资源"。角色定义如下:
<role ref="rulesets/emptycode" />
和
<role ref="rulesets/unnecessary" />
在其他所有情况下,这种定义都有效。我发现的是:有一个规则集名为&#34; 不必要&#34;在 ecmasrcipt 类别下,所以这个定义可能需要一些使用java版本的建议。我尝试了多个想法,比如将 language 属性设置为规则集 xml节点(&#34; JAVA&#34;,基于PMD JavaDoc),以及一些前置后缀 ref ,但它不起作用,我在网上找不到可行的解决方案。有人有想法,我忘记了什么,或者我失败了什么?谢谢你的帮助!
答案 0 :(得分:8)
快速而肮脏的解决方案:在项目中放置规则集:
lib/pmd-x.x.x.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)<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)我一直在<linkXref>false</linkXref>
中运行mvn pmd:pmd(pom.xml
)并调整路径,直到我停止出错。