Domanda

Sto riformulare questa domanda per renderlo un po 'più semplice e facile da capire, si spera.

Ho circa 30 componenti (interni) che vanno in una singola applicazione web. Ciò significa che 30 diversi progetti con la propria POM separata. Io uso eredità un bel po 'nei miei POM quindi una delle cose che ereditano è una configurazione PMD / CPD per evitare la duplicazione del codice.

Anche se ho CPD / PMD esecuzione, rileva solo il codice duplicato all'interno dello stesso progetto. Vorrei che per rilevare in nessuno dei miei progetti, se non v'è il codice condiviso tra i progetti che possono essere refactoring fuori. Inoltre, ero alla ricerca di qualcosa che potrebbe (utilizzando lo stesso concetto / modello) verificare che nessun codice è condiviso tra le altre dipendenze open source.

Sarebbe CPD / PMD, tranne che opererebbe sui vasetti di origine. Questo compito sarebbe consumare una grande quantità di memoria, se si esegue la scansione di tutti i progetti e le loro dipendenze per la duplicazione. In questo momento, vorrei solo applicare che a progetti interni. Se funziona, allora sarebbe relativamente facile / semplice per scalare che fuori.

Walter

È stato utile?

Soluzione

Non sono sicuro che ho avuto tutto, ma ...

Mi piacerebbe creare un modulo di aggregazione di tutti i progetti come le dipendenze, utilizzare il Maven -dependency-plugin ed è unpack- dipendenze mojo per ottenere tutte le fonti di dipendenze vaso (il mojo può prendere un classificatore come parametri) e decomprimere-li (magari in target/generated-sources/java, il Maven plug accumulo aiutante può aiutare qui) e, infine, eseguire PMD: CPD su tutta la base di origine.

Questa potrebbe essere necessario qualche ritocco, non ho prova questo a tutti.

Altri suggerimenti

Sembra che si desidera trovare il codice duplicato da nessuna parte nei vostri 30 progetti. Non posso parlare per il PMD; Presumo gli si dice di fare un progetto gigantesco che contiene tutti i file di origine dall'unione dei progetti. Ma sì, questo sarebbe prendere un sacco di RAM e CPU.

Un altro strumento che fa è il Java CloneDR . Il CloneDR trova codice duplicato se è esattamente la stessa o vicino (per esempio, un paio di modifiche) indipendentemente schema di codice sorgente o commenti intermedi. E 'abbastanza facile per configurarlo per elaborare tutti i file presenti nella serie di progetti.

Basta eseguire PMD: CPD come un programma stand-alone. Tutto ciò che serve è una directory, che verrà recurse. Almeno lo ha fatto per me. Mi sono trasferito tutta la mia fonte di una directory e corse la gui CPD dal file batch distribuito con PMD-4.2.5.

Si può forse dare un'occhiata a sonar :

  motore

Sonar-CPD che è molto più scalabile e in grado di rilevare incrociati progetti duplicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top