2009-12-31 2 views
1

Я перефразирую этот вопрос, чтобы сделать его более простым и легким для понимания, надеюсь.CPD/PMD между проектами?

У меня есть примерно 30 компонентов (внутренних), которые входят в одно веб-приложение. Это означает 30 различных проектов со своим отдельным POM. Я использую наследование довольно много в моих POM, поэтому одна из вещей, которые они наследуют, - это конфигурация PMD/CPD для предотвращения дублирования кода.

Несмотря на то, что у меня работает CPD/PMD, он обнаруживает только дублирующий код в рамках одного и того же проекта. Я бы хотел, чтобы он обнаруживал в любом из моих проектов, если в проектах, которые можно реорганизовать, есть код. Более того, я искал что-то, что могло бы (используя ту же концепцию/шаблон) проверить, что никакой код не используется совместно с другими зависимостями с открытым исходным кодом.

Это будет CPD/PMD, за исключением того, что он будет работать на исходных баночках. Эта задача будет потреблять большой объем памяти, если вы сканируете все проекты и их зависимости для дублирования. Сейчас я просто хотел бы применить это к внутренним проектам. Если это сработает, тогда было бы относительно просто/просто сделать это.

Walter

+0

Вы можете уточнить вопрос? – TofuBeer

+0

Вы хотите детектор двойного кода. Конечно, PMD - ваш зверь, и все готово. Похоже, вы хотите перепроектировать файл WAR, чтобы сравнить его исходный код (как вы собираетесь перевести байт-код, похожий на исходный источник, это звучит излишне, недостижимо и просто непривычно) с другим исходным кодом или просто сравнить его байтовый код с вашим байт-кодом. Почему бы просто не сравнить исходный код, который у вас есть? – martinr

+0

Кроме того, в некоторых случаях могут возникнуть юридические проблемы с попыткой обратного преобразования кода. – martinr

ответ

2

Я не уверен, что я получил все, но ...

Я бы создать агрегатный модуль со всеми проектами, как зависимости, используйте maven-dependency-plugin и это unpack-dependencies харизмы, чтобы получить все зависимости источники баночки (колдовской могут возьмите классификатор в качестве параметра) и распакуйте их (возможно, в target/generated-sources/java, здесь может помочь maven build helper plugin) и, наконец, запустить pmd:cpd на всей исходной базе.

Возможно, это потребует некоторой настройки, я не испытал это вообще.

+0

Pascal, спасибо за ваши комментарии. Я дам эту попытку в будущем. На данный момент это звучит как мой лучший вариант. Если это сработает, возможно, я должен внести свой вклад в плагин pmd: cpd. Я знаю, что большинство организаций не разделяют такие проекты, но любой дубликат кода - это время, потраченное на то, чтобы изобретать колесо, что приводит к большему количеству ошибок и ухабистой поездке. – 2010-01-12 13:06:10

+1

Ваш прецедент подходит для ИМХО. На самом деле имеет смысл использовать анализатор сходства при распространении кода по нескольким модулям. –

1

Это звучит, как вы хотите, чтобы найти дубликаты кода в любом месте в ваших 30 проектов. Я не могу говорить за PMD; Я предполагаю, что вы говорите ему, чтобы один гигантский проект содержал все исходные файлы из объединения проектов. Но да, это потребует много оперативной памяти и процессора.

Другой инструмент, который делает это Java CloneDR. CloneDR находит дубликат кода, является ли он точно таким же или близким (например, несколько изменений) независимо от расположения исходного кода или промежуточных комментариев. Очень легко настроить его для обработки всех файлов в вашем наборе проектов.

+0

Да, Ира, это правильно.У меня есть 30 проектов, которые я разделил, поэтому я могу лучше понять, как связаны проекты, а также изолировать проблемы. Это боль в но, как часто мне приходится обновлять помпы, но проект гораздо более модульный. Суб-проекты гораздо более целенаправленны и имеют четкую цель. – 2010-01-12 13:03:55

0

Просто запустите PMD: CPD как автономную программу. Все, что ему нужно, это каталог, и он будет рекурсивно. По крайней мере, это было для меня. Я переместил весь исходный код в один каталог и запустил CPD gui из пакетного файла, распространенного с PMD-4.2.5.

0

Вы можете, возможно, взглянуть на sonar:

Сонар-CPD двигатель, который является гораздо более масштабируемым и может обнаружить кросс-проекты дупликации.

Смежные вопросы