项目之间的CPD / PMD?

问题描述 投票:2回答:5

我正在改写这个问题,希望使它更简单易懂。

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

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

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

沃尔特

java maven-2 code-duplication pmd similarity
5个回答
2
投票

我不确定我是否拥有一切,但...

我将创建一个将所有项目都作为依赖项的聚合模块,使用maven-dependency-plugin和它的unpack-dependencies mojo来获取所有依赖项jar(mojo可以将分类器作为参数)并解压缩它们(也许在[ C0],target/generated-sources/java可能会有所帮助),最后在整个源库上运行maven build helper plugin

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


1
投票

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

另一个可用的工具是pmd:cpd。无论源代码的布局或插入的注释如何,CloneDR都可以找到重复的代码,无论它们是完全相同还是接近(例如,几次编辑)。设置它来处理项目集中的所有文件非常容易。


0
投票

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


0
投票

您也许可以看看Java CloneDR

Sonar-CPD引擎,具有更大的可伸缩性,可以检测跨项目的重复项。


-1
投票

您可以尝试将蜥蜴用于Python。但是,它不适用于源jar。

“代码重复检测器蜥蜴-Eduplicate {您的代码路径}“

sonar

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

https://pypi.org/project/lizard/

© www.soinside.com 2019 - 2024. All rights reserved.