java - 我们如何使用类似于 Intellij 的 Netbeans 来查找重复代码?

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

最佳答案

您可以使用 Apache Maven PMD Plugin 查找 NetBeans Maven 项目的重复代码。 。只需将以下内容添加到项目的 pom.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>    

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

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

但是,如果发现重复,则文​​件看起来类似于:

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

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

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

BUILD FAILURE

Total time: 2.689 s Finished at: 2018-02-15T17:06:23-05:00 Final Memory: 20M/70M

Failed to execute goal org.apache.maven.plugins:maven-pmd-plugin:2.7.1:cpd-check (default) on project checkduplication: You have 1 CPD duplication. For more details see:D:\NetBeansProjectsJava9\checkduplication\target\cpd.xml -> [Help 1]

最后几点:

  • 指定<goal>cpd-check</goal> (正如我所做的那样)在检测到重复时会导致构建失败,但是 alternative goals can be specified .

  • ma​​ven-pmd-plugin 的版本比 2.7.1 更新,但这是可以进行复制/粘贴检测的​​最新版本盒子的。更新的版本可能在使用配置后可以工作,但我没有尝试过。

关于java - 我们如何使用类似于 Intellij 的 Netbeans 来查找重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48761065/

相关文章:

java - JDatePicker 日期格式化

java - Java 中的 Get 和 Set 方法。它们是如何工作的?

JavaFX,鼠标输入时

java - 在 JSP 之间传递参数

java - 未找到 Servlet-Context : Spring 4 Hibernate 4 Maven JSF PrimeFaces in NetBeans

java - 如何更改 JCalendar 中特定日期的颜色?

java - 评论解决问题sql.java.sql.SQLException

java - 从 URL 加载图像时的性能问题

java - 使用 jFrame 将随机数显示到文本字段中

java - 方法重复输出