1

有人可以帮我在 pmd 中为 Eclipse 创建规则吗?即使我关注 PMD 官方网站,我也无法开始。我打算在 java 中创建规则而不是 XPath 规则。有什么简单的指南来启动它吗?谢谢

4

2 回答 2

0

不久前我写了一个教程,其中包含一些可能有用的示例代码。

http://www.techtraits.ca/writting-pretty-code-with-pmd/

于 2011-11-22T22:48:05.520 回答
0

尝试“使用 Java 编写规则”方法,因为您可以轻松地以这种方式开始,稍后您可以尝试使用 XPath 表达式。您可以按照官方链接旁边的这些步骤进行操作。

  • 从 PMD 附带的 src 包开始(例如 pmd-4.2.x\src),在现有包中创建您的 java 类(例如 pmd-4.2.5\src\net\sourceforge\pmd\rules\basic)。在这种情况下,它是以下示例代码 (WhileLoopsMustUseBracesRule):

    package net.sourceforge.pmd.rules.basic;

    import net.sourceforge.pmd.*;
    import net.sourceforge.pmd.ast.*;

    public class WhileLoopsMustUseBracesRule extends AbstractRule {
        public Object visit(ASTWhileStatement node, Object data) {
            SimpleNode firstStmt = (SimpleNode)node.jjtGetChild(1);
            if (!hasBlockAsFirstChild(firstStmt)) {
                addViolation(data, node);
            }
            return super.visit(node,data);
        }
        private boolean hasBlockAsFirstChild(SimpleNode node) {
            return (node.jjtGetNumChildren() != 0 && (node.jjtGetChild(0) instanceof ASTBlock));
        }
    }

  • 在 basic.xml(pmd-4.2.5\rulesets\basic.xml) 中附加以下规则:

    将“将 WhileLoopsMustUseBracesRule 规则放入规则集文件”部分中的 xml 内容复制粘贴到 basic.xml。

    换行

    class="WhileLoopsMustUseBracesRule">
    

    class="net.sourceforge.pmd.rules.basic.WhileLoopsMustUseBracesRule">
    

    因为您必须在“net.sourceforge.pmd.rules.basic”包中创建了 java 文件 (WhileLoopsMustUseBracesRule.java)

  • 如果在 Windows 中,请从 cmd 提示符运行此命令。


    pmd.bat C:\JAVAFILE_ON_WHICH_YOU_WANT_TO_RUN_THIS_RULE xml C:\PMD\pmd-4.2.5\pmd-4.2.5\rulesets\basic.xml 

  • 对于 nix os (linux/MacOS),使用 pmd.sh 而不是 pmd.bat
  • 一旦你能够让它运行,你就可以在你自己的包中创建你自己的规则。

希望这可以帮助。!

于 2011-09-22T10:50:07.060 回答