有许多重复代码,包括:
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
答案 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 更多,但这是最新版本,其中复制/粘贴检测工作正常的盒子。使用配置后,更新的版本可能会有效,但我没有尝试过。