PMD/CPD:使用注释忽略代码位

dig*_*nie 16 java duplication pmd maven cpd

有没有办法告诉PMD忽略检查部分代码是否有重复?

例如,我可以这样做:

// CPD-Ignore-On
...
// CPD-Ignore-Off
Run Code Online (Sandbox Code Playgroud)

目前我使用Maven设置这样的PMD,但是除非我遗漏了什么,否则看不到任何想让我做我想做的事情.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <minimumTokens>40</minimumTokens>
                <targetJdk>1.5</targetJdk>
                <ignoreIdentifiers>true</ignoreIdentifiers>
                <ignoreLiterals>true</ignoreLiterals>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

Avi*_*vik 18

经过深入挖掘后,我终于遇到了它.

通过添加注释@SuppressWarnings("CPD-START"),@SuppressWarnings("CPD-END")CPD将忽略其中的所有代码 - 因此您可以避免误报.

来源 - http://pmd.sourceforge.net/pmd-5.0.5/cpd-usage.html.

  • 这种方法的问题在于您无法从CPD中排除整个类.结束注释需要一些目标. (5认同)
  • @Snicolas我将`@SuppressWarnings("CPD-START")`绑定到类中,省略了结束注释,看起来整个类都被忽略了.不理想,但它似乎工作. (5认同)

Joh*_*nco 10

我知道这是一个 8 年前的问题,但为了完整性,CPD 从 PMD 5.6.0(2017 年 4 月)开始就支持这个问题。

基于评论的抑制的完整(当前)文档可在https://pmd.github.io/pmd-6.13.0/pmd_userdocs_cpd.html#suppression获取

值得注意的是,如果文件有注释// CPD-OFF,但没有匹配// CPD-ON,则所有内容都将被忽略,直到文件末尾。


kam*_*661 2

我发现只能在项目 pom.xml 中的 maven-pmd-plugin 配置中禁用整个类检查。它是通过添加<excludes>标签来执行的。如果你想这样做,你的conf应该是这样的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <minimumTokens>40</minimumTokens>
        <targetJdk>1.5</targetJdk>
        <ignoreIdentifiers>true</ignoreIdentifiers>
        <ignoreLiterals>true</ignoreLiterals>
        <excludes>
            <exclude>**/YourClassName.java</exclude>
            ........
            <exclude>....</exclude>
        </excludes>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)