Frage

Ich bin Umformulierung diese Frage ist es einfacher und leicht zu verstehen, hoffentlich ein wenig zu machen.

Ich habe rund 30 Komponenten (intern), die in eine einzige Web-Anwendung gehen. Das bedeutet, dass 30 verschiedene Projekte mit ihrer eigenen separaten POM. Ich benutze Erbschaft ziemlich viel in meinem POMs so eines der Dinge, die sie erben ist ein PMD / CPD-Konfigurationscode Doppelarbeit zu vermeiden.

Auch wenn ich CPD / PMD ausgeführt haben, es erkennt nur doppelten Code innerhalb des gleichen Projekts. Ich möchte es in keinem meiner Projekte zu erkennen, ob es Code unter den Projekten geteilt ist, die Refactoring werden kann. Außerdem war ich für etwas, das überprüfen konnte (das gleiche Konzept / Muster verwendet wird), dass kein Code zwischen anderen Open-Source-Abhängigkeiten gemeinsam genutzt wird.

Es wäre CPD / PMD sein, außer es auf den Source-Gläser arbeiten würde. Diese Aufgabe würde eine große Menge an Speicher verbrauchen, wenn Sie alle Projekte scannen und deren Abhängigkeiten für die Vervielfältigung. Gerade jetzt, ich würde nur bewerben, dass auf interne Projekte. Wenn es funktioniert, dann wäre es relativ einfach / einfach sein, dass aus zu skalieren.

Walter

War es hilfreich?

Lösung

Ich bin nicht sicher, habe ich alles, aber ...

Ich würde ein Aggregieren Modul mit allen Projekten als Abhängigkeiten erstellen, verwenden die Maven -Abhängigkeit-Plugin und es ist Auspacken Abhängigkeiten mojo alle Abhängigkeiten Quellen Glas zu erhalten und auspacken-sie (vielleicht in target/generated-sources/java (der mojo einen Klassifikator als Parameter nehmen kann), a href den <= "http://mojo.codehaus.org/build-helper -maven-Plugin / "rel = "nofollow noreferrer"> maven build Helfer Plugin kann hier helfen) und schließlich laufen pmd: cpd auf der gesamten Source-Basis.

Dies kann einige Optimierungen müssen, ich habe das gar nicht testen.

Andere Tipps

Es klingt wie Sie in Ihren 30 Projekte doppelten Code überall finden möchten. Ich kann nicht für PMD sprechen; Ich nehme an, Sie sagen, es zu einem riesigen Projekt machen alle Quelldateien aus der Vereinigung der Projekte enthält. Aber ja, das viel RAM und CPU nehmen würde.

Ein weiteres Werkzeug, das tut, ist das Java CloneDR . Die CloneDR findet doppelten Code, ob es genau die gleichen oder in der Nähe (beispielsweise ein paar Änderungen), unabhängig von Quellcode-Layout oder dazwischenliegenden Kommentaren. Es ist ziemlich einfach, um es einzurichten alle Dateien in Ihrer Reihe von Projekten zu verarbeiten.

Just PMD laufen: CPD als Stand-alone-Programm. Alles was es braucht ist ein Verzeichnis, und es wird Rekursion. Immerhin hat es für mich. Ich zog alle meine Quelle zu einem Verzeichnis und lief den CPD gui aus der Batch-Datei mit PMD-4.2.5 verteilt.

Sie können vielleicht einen Blick auf Sonar :

  

Sonar-CPD-Engine, die viel besser skalierbar und kann Quer Projekte Doppelungen erkennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top