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

时间:2011-04-23 23:53:35

标签: java maven pmd duplication cpd

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

例如,我可以这样做:

// CPD-Ignore-On
...
// CPD-Ignore-Off

目前我使用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>

3 个答案:

答案 0 :(得分:17)

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

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

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

答案 1 :(得分:2)

我发现只有在项目pom中禁用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>

答案 2 :(得分:0)

我知道这是一个已有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,则所有文件将被忽略,直到文件结尾。