java - 如何在 pmd 中添加自定义规则并从终端使用它

标签 java pmd

我在pmd中编写了自定义规则并编写了规则类。

自定义规则是:

<?xml version="1.0"?>
<ruleset name="My custom rules"
 xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0              http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
    <rule name="WhileLoopsMustUseBracesRule"
     message="Avoid using 'while' statements without curly braces"
     class="WhileLoopsMustUseBracesRule">
        <description>
            Avoid using 'while' statements without using curly braces
        </description>
        <priority>3</priority>
        <example>
            <![CDATA[
                public void doSomething() {
                    while (true)
                    x++;
                }
            ]]>
        </example>
    </rule>
</ruleset>

类(class)是:

import net.sourceforge.pmd.lang.java.rule.*;
import net.sourceforge.pmd.lang.java.ast.*;
public class WhileLoopsMustUseBracesRule extends AbstractJavaRule {
    public Object visit(ASTWhileStatement node, Object data) {
        System.out.println("hello world");
        return data;
    }
}

现在当我从终端输入命令

sh run.sh pmd -d /Users/sree/Documents/learning/programs/java xml /Users/sree/Desktop/customrule.xml 

我收到此错误:

Was passed main parameter 'xml' but no main parameter was defined

现在包含自定义规则,以便我可以从终端访问它,并将规则和规则集.xml 文件捆绑到 jar 文件中后如何将其包含在类路径中

注意:我使用的是 Mac,而不是 Windows 操作系统

最佳答案

我正在使用这个:

./run.sh pmd -d /Users/ardaaslan/Documents/workspace/PMDRulesTest/src/AttributeTypeAndNameIsInconsistentTest.java -f text -R /Users/ardaaslan/Downloads/pmd-src-5.5.1/pmd-java/src/main/resources/rulesets/java/customrules.xml -version 1.7

-d之后我给出了自定义规则代码的目录。 然后我用 -f 给出输出格式,即文本。然后是rule.xml的位置。

要做的额外事情是使用 pmd-bin 的库作为类路径来编译源代码

javac -cp /Users/ardaaslan/Downloads/pmd-bin-5.5.0/lib/\* AttributeTypeAndNameIsInconsistentRule.java

然后将编译后的 .class 文件放入 jar 并将该 jar 移动到

pmd-bin-5.5.0/lib

让 pmd 找到你的类文件

之后您可以尝试再次执行run.sh

关于java - 如何在 pmd 中添加自定义规则并从终端使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21807746/

相关文章:

java - 为大数据生成最佳 UUID

java - 如何将所有规则从 SonarQube 质量配置文件导出到 SpotBugs、Checkstyle 和 PMD 规则文件

java - 如何在 Sonarqube 中导入 findbugs/PMD

java - 如何在我的 WebContent 文件夹中获取文件的真实路径?

java - 一个类的 "contract"是什么意思

java - 使用 JNI 仅将缓冲区的一部分从 native 代码复制到 Java

java - 如何从代码中获取作为 java 对象的 PMD 结果报告?

Eclipse 在导入后包装 NOPMD 标签

java - Joshua Bloch 的 Builder 模式和 PMD 警告

java - 按顺序运行异步操作