我们如何使用类似于 Intellij 的 Netbeans 查找重复代码?
How can we find duplicate code using Netbeans similar to Intellij?
有很多重复代码,包括:
Duplicates within file
Duplicates within package
Duplicates around multiple packages
Duplicates around separate Maven Modules
有没有办法使用 Netbeans 8+ 或 Netbeans 插件或 Maven 插件与 Netbeans 或类似于 Intellij 的独立工具来查找重复代码?
我找不到相同的文档。
我在 Maven 中找到了 PMD,但无法 link 使用 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 后,验证重复检测是否正常工作的一个非常简单的方法是 copy/paste 一些 class 中的一个大方法,然后给粘贴的方法另一个名称这样代码仍然可以编译。我试过了,在 Output window:
中得到了以下结果
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.
maven-pmd-plugin 比 2.7.1 有更新的版本,但那是copy/paste 检测开箱即用的最新版本。较新的版本在玩过配置后可能会工作,但我没有尝试过。
有很多重复代码,包括:
Duplicates within file
Duplicates within package
Duplicates around multiple packages
Duplicates around separate Maven Modules
有没有办法使用 Netbeans 8+ 或 Netbeans 插件或 Maven 插件与 Netbeans 或类似于 Intellij 的独立工具来查找重复代码?
我找不到相同的文档。
我在 Maven 中找到了 PMD,但无法 link 使用 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 后,验证重复检测是否正常工作的一个非常简单的方法是 copy/paste 一些 class 中的一个大方法,然后给粘贴的方法另一个名称这样代码仍然可以编译。我试过了,在 Output window:
中得到了以下结果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.maven-pmd-plugin 比 2.7.1 有更新的版本,但那是copy/paste 检测开箱即用的最新版本。较新的版本在玩过配置后可能会工作,但我没有尝试过。