我们如何使用类似于Intellij的Netbeans找到重复的代码?

时间:2018-02-13 06:54:37

标签: java netbeans netbeans-8 code-duplication netbeans-plugins

有许多重复代码,包括:

Duplicates within file
Duplicates within package
Duplicates around multiple packages
Duplicates around separate Maven Modules

有没有办法找到使用Netbeans 8+或Netbeans插件或Maven插件的Netbeans或类似于Intellij的独立工具的重复代码?

我无法找到相同的文档。

我在Maven找到了PMD,但无法与Netbeans 8.2建立链接,我们只能使用Netbeans

1 个答案:

答案 0 :(得分:2)

您可以使用Apache Maven PMD Plugin找到NetBeans Maven项目的重复代码。只需将以下内容添加到项目的 pom.xml

即可
...
regex => qr/^some message:(.*)/i,
...
if ($message =~ /$e->{regex}/) {

构建项目时,将运行PMD的复制粘贴检测器(CPD),并将其结果写入文件 {project directory} \ target \ cpd.xml 。如果没有找到重复文件,则该文件如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.7.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>check</goal>
                        <goal>cpd-check</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.7.1</version>
        </plugin>
    </plugins>
</reporting>    

但是,如果发现重复,文件看起来与此类似:

<?xml version="1.0" encoding="UTF-8"?>
<pmd-cpd>
</pmd-cpd>

如上所述更新POM后,验证重复检测工作的一种非常简单的方法是在某个类中复制/粘贴大型方法,然后为粘贴的方法指定另一个名称,以便代码仍然可以编译。我试过了,并在输出窗口中得到了以下结果:

  

maven-pmd-plugin:2.7.1:cpd-check(默认)@ checkduplication ---

     

建立失败

     

总时间:2.689秒结束时间:2018-02-15T17:06:23-05:00决赛   记忆:20M / 70M

     

无法执行目标   org.apache.maven.plugins:maven-pmd-plugin:2.7.1:cpd-check(默认)on   project checkduplication:你有1个CPD重复。更多细节   请参阅:D:\ NetBeansProjectsJava9 \ checkduplication \ target \ cpd.xml - &gt; [救命   1]

最后几点:

  • 指定<?xml version="1.0" encoding="UTF-8"?> <pmd-cpd> <duplication lines="162" tokens="608"> <file line="95" path="D:\NetBeansProjectsJava9\checkduplication\src\main\java\com\unthreading\checkduplication\ParseJavadoc.java"/> <file line="258" path="D:\NetBeansProjectsJava9\checkduplication\src\main\java\com\unthreading\checkduplication\ParseJavadoc.java"/> <codefragment> <![CDATA[ ...details of the duplicated code.... ]]> </codefragment> </duplication> </pmd-cpd> (正如我所做的那样)会在检测到重复时导致构建失败,但alternative goals can be specified

  • maven-pmd-plugin 的最新版本比 2.7.1 更多,但这是最新版本,其中复制/粘贴检测工作正常的盒子。使用配置后,更新的版本可能会有效,但我没有尝试过。