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

23
有没有一种方法可以告诉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>
4个回答

34

5
这种方法的问题在于你无法从职业发展计划中完全排除一个班级。最终的注释需要有具体目标。 - Snicolas
6
我绑定了 @SuppressWarnings("CPD-START") 到这个类上,并省略了结束标注,看起来整个类都被忽略了。虽然不太理想,但似乎可以工作。 - Gili
1
自PMD 5.7.0版本起支持基于注释的抑制。 - Johnco
@SuppressWarnings("CPD-START") 只有在类的顶部起作用,它会跳过 CPD 扫描。 - Vishwas Shenoy Alevoor

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,则会忽略该文件直到文件结束。


2

我发现只有在项目pom中配置maven-pmd-plugin时才能禁用整个类检查。这可以通过添加<excludes>标签来实现。如果您想要这样做,您的配置应该像这样:

<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>

0
有没有办法告诉PMD忽略代码重复检查的部分?
对于代码重复,您有三个选项:
1. 您可以在要跳过的代码周围使用 @SuppressWarnings("CPD-START") 和 @SuppressWarnings("CPD-END")。
2.如果您想忽略从特定行到EOF的文件,仅使用 @SuppressWarnings("CPD-START") 就足够了。
3.如果您已经有 Suppressing annotations,您可以按照文档中docs所述添加 CPD-START,即 @SuppressWarnings({"PMD", "CPD-START"})。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接