如何更改 PMD 的复制粘贴检测器 (CPD) 报告输出

How to change PMD's Copy Paste Detector (CPD) report output

我想修改 CPD 以仅在生成报告时吐出 Found a X line (Y tokens) duplication in the following files: ...,即抑制源代码行。我有 /src/ 文件并试图通过注释掉

来修改 /src/net/sourceforge/pmd/cpd/ 中的 SimpleRenderer.java
String source = match.getSourceCodeSlice();

if (trimLeadingWhitespace) {
    String[] lines = source.split("[" + PMD.EOL + "]");
    int trimDepth = StringUtil.maxCommonLeadingWhitespaceForAll(lines);
    if (trimDepth > 0) {
        lines = StringUtil.trimStartOn(lines, trimDepth);
    }
    for (int i=0; i<lines.length; i++) {
        rpt.append(lines[i]).append(PMD.EOL);
    }  
    return;
}

但是报告没有改变。我有点 Java 新手,所以请记住这一点。我需要以某种方式在 Eclipse 中重建 pmd-4.2.x 吗?

有不同的方法可以实现:

  1. 使用 egrep 完全不修改 PMD/CPD。你可以例如post-筛选报告:

    bin/run.sh cpd --minimum-tokens 100 --files src --encoding UTF-8 \
      | egrep "^Found a |^Starting at line "
    

    这将只输出以 "Found a " 或 "Starting at line " 开头的行。

  2. 正在修改PMD/CPD以调整报告格式。但是,我建议将这种修改后的报告格式作为一种单独的格式来实施,例如将其命名为 "text_without_sources",而不是更改默认格式。然后,您可以使用 bin/run.sh cpd --format text_without_sources ....

    调用 CPD

    在这种情况下,您需要从源代码构建 PMD。 PMD 使用 Maven to build (you can use eclipse during development - but the package is built with maven). After a mvn clean package in the top-directory of the cloned sources from https://github.com/pmd/pmd 你会在目录 pmd-dist/target/.

    中找到二进制文件

    查看报告如何集成到 CPDConfiguration.java - 您可以添加自己的 SimpleRenderer 版本。

  3. https://sourceforge.net/p/pmd/bugs/

  4. 创建功能请求