18

Is there a way to tell PMD to ignore checking parts of code for duplication?

For example, can I do something like this:

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

Currently I have PMD set up like this using Maven, but don't see any arguments that would like me do what I want unless I am missing something.

        <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

4 回答 4

28

在挖了足够多之后,我终于找到了它。

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

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

于 2013-09-05T00:31:19.047 回答
7

我知道这是一个 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的,所有内容都将被忽略,直到文件结束。

于 2019-04-17T03:31:09.087 回答
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>
于 2013-02-28T09:01:41.693 回答
0

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

对于复制,您有 3 个选项:

  1. 您可以使用@SuppressWarnings("CPD-START")@SuppressWarnings("CPD-END")围绕您想要跳过的代码。

  2. 如果您想忽略特定行直到 EOF 的文件,单独使用@SuppressWarnings("CPD-START")就足够了。

  3. 如果您已经有 Suppressing annotations,您可以按照文档CPD-START中的说明添加,即@SuppressWarnings({"PMD", "CPD-START"})

于 2022-02-24T01:24:35.330 回答