Java 项目之间的CPD/PMD?

Java 项目之间的CPD/PMD?,java,maven-2,code-duplication,pmd,similarity,Java,Maven 2,Code Duplication,Pmd,Similarity,我重新表述这个问题,希望能让它更简单易懂 我有大约30个组件(内部)进入一个web应用程序。这意味着30个不同的项目有各自的POM。我在POM中使用了相当多的继承,因此它们继承的内容之一是PMD/CPD配置,以防止代码重复 即使我运行了CPD/PMD,它也只检测同一项目中的重复代码。我希望它能在我的任何一个项目中检测到项目之间是否存在可以重构的共享代码。此外,我正在寻找能够(使用相同的概念/模式)验证其他开源依赖项之间没有共享代码的东西 它将是CPD/PMD,但它将在源JAR上运行。如果扫描所有

我重新表述这个问题,希望能让它更简单易懂

我有大约30个组件(内部)进入一个web应用程序。这意味着30个不同的项目有各自的POM。我在POM中使用了相当多的继承,因此它们继承的内容之一是PMD/CPD配置,以防止代码重复

即使我运行了CPD/PMD,它也只检测同一项目中的重复代码。我希望它能在我的任何一个项目中检测到项目之间是否存在可以重构的共享代码。此外,我正在寻找能够(使用相同的概念/模式)验证其他开源依赖项之间没有共享代码的东西

它将是CPD/PMD,但它将在源JAR上运行。如果扫描所有项目及其依赖项以查找重复,则此任务将消耗大量内存。现在,我只想将其应用于内部项目。如果它有效,那么扩展它将相对容易/直接


Walter

听起来你想在30个项目中的任何地方找到重复的代码。我不能为PMD说话;我假设你告诉它制作一个包含所有源文件的大型项目。但是是的,这需要大量的RAM和CPU


另一个工具是。CloneDR会发现重复的代码,无论它是完全相同的还是相近的(例如,一些编辑),而不管源代码布局或中间的注释如何。设置它来处理项目集中的所有文件非常容易。

我不确定我是否得到了所有东西,但

我将创建一个聚合模块,将所有项目作为依赖项,使用and's mojo获取所有依赖项源jar(mojo可以使用一个分类器作为参数),并将它们解压缩(可能在
target/generated sources/java
,这里可能会有所帮助),最后在整个源代码库上运行


这可能需要一些调整,我根本没有测试它。

只是将PMD:CPD作为一个独立程序运行。它只需要一个目录,它就会递归。至少对我来说是这样。我将所有源代码移动到一个目录,并从与PMD-4.2.5一起分发的批处理文件中运行CPD gui

您或许可以看看:

Sonar CPD引擎,可扩展性更强,可检测跨项目重复


你可以试着用蜥蜴代替蟒蛇。 不过,它在源jar上不起作用

“代码重复检测器 lizard-educplicate{代码路径}”

PMD/CPD提供了更高的粒度,因为它允许用户在将代码块标记为重复之前指定令牌的数量


你能澄清这个问题吗?你想要一个重复的代码检测器。PMD肯定是你的野兽,你完蛋了。听起来你想对WAR文件进行反向工程,将其源代码与其他源代码进行比较(如何将字节码翻译成原始源代码?这听起来是不必要的、无法实现的,而且完全无用),或者只是将其字节码与你的字节码进行比较。为什么不直接比较一下你的源代码呢?另外,在某些情况下,试图对代码进行反向工程可能会有法律问题。是的,Ira,这是正确的。我有30个项目,我分出来,这样我可以更好地了解项目是如何相关的,以及隔离一些关注点。这是一个痛苦的项目,但我有多么频繁地更新poms,但该项目是更模块化。子项目更加集中,目标明确。帕斯卡,谢谢你的评论。我以后会试试的。这听起来是我目前最好的选择。如果它能工作,也许我应该为pmd:cpd插件做些贡献。我知道大多数组织不会像这样拆分项目,但是任何重复的代码都是浪费时间重新发明轮子,这会导致更多的bug和颠簸。在跨多个模块的代码上运行相似性分析器确实很有意义。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-更新。正如您所看到的,文档中没有什么内容。