2009-04-01 9 views
9

Ho un progetto Java che attualmente contiene molti JAR nella sua directory di librerie, che sono tutti inclusi nel pacchetto risultante durante la creazione. So, tuttavia, che alcune di queste librerie non sono mai referenziate nel progetto.Strumento per rimuovere le dipendenze non necessarie in un progetto Java

Esiste uno strumento che può cercare librerie che non fanno riferimento all'interno del progetto? Immagino che ci debba essere qualcosa in quel senso.

BTW, un plugin Eclipse sarebbe fantastico.

EDIT: Ho scelto di andare con ClassDep perché era l'unico suggerimento che funzionava. Tuttavia, ho qualche problema: controlla this question

+0

Ottima domanda: ho sempre desiderato uno strumento per farlo. Ce n'è uno là fuori! –

+0

http://sourceforge.net/project/downloading.php?group_id=147285&use_mirror=freefr&filename=cphelper_1.2.8GA.zip funziona per il download – VonC

+0

Lo condividerò stasera o domani: qualsiasi file di condivisione è in "accesso negato" da lavoro;) – VonC

risposta

4

ClassDep (da Sun, nel kit di sviluppo Jini) lo farà per voi.

+0

Sembra grandioso, ma sembra che non sia banale da usare. Sto postando un'altra domanda in merito. –

+0

Ciao, Brian. Se è possibile, si prega di consultare http://stackoverflow.com/questions/745574/classpath-problems-with-jini-classdep-javas-dependency-finder –

+1

Il collegamento ClassDep sopra riportato ora punta a un progetto di Apache River che non ha indizio su come usarlo. Qualcuno ha suggerimenti? –

2

ClassPathHelper può aiutarti con quello.

Espacially il "Not on Classpath View"

Not on Classpath

Questo punto di vista le scansioni per i vasi che non sono nel classpath (ma sono sotto il progetto in corso). Fornisce la navigazione di base dei pacchetti e delle classi disponibili ma non sul classpath. Ciò può essere utile quando si tenta di creare un classpath, poiché è possibile cercare rapidamente le classi mancanti per vedere quali jar contengono.

+0

Devo stare qui troppo ... Quando ho visto uno screenshot di Eclipse, ho immediatamente pensato "VonC!" –

+0

TssTss ... e ancora un'altra voce da aggiungere al "Sai che hai esplorato troppo lo Stack Overflow quando?" domanda (http://stackoverflow.com/questions/247342);) – VonC

+0

Muoio dalla voglia di provarlo, ma non posso scaricarlo! http://sourceforge.net/project/showfiles.php?group_id=147285&package_id=162288 (dice che non è disponibile - WTF?) –

1

Non un plug-in di eclissi, ma credo che la funzionalità "restringente" di ProGuard sia esattamente quello che stai cercando.

+0

Io non la penso così: proguard può rimuovere classi non utilizzate dai propri jar di input ma non rimuove i contenitori di libreria da un progetto –

7

Attenzione al caso in cui una classe viene caricata tramite Class.forName() e non specificata come dipendenza nel file manifest (esiste un attributo Depends-On: per questo, ma molte persone non specificano esso, che rompe strumenti come questo, la rovina della mia esistenza quando ho lavorato su un tale strumento).

+0

ciao Problema di interruzione! –

+0

@Matt Non è sicuro al 100% cosa intendi ... puoi elaborare? – TofuBeer

0

Inoltre, non è possibile stabilire se i JAR che non si importano siano dipendenti dalle dipendenze delle dipendenze. Ad esempio, se utilizzi Spring, questo viene fornito con le sue dipendenze, anche se non le imponi o le chiami nel tuo codice. Sono all'oscuro di ProGuard - controlla per quei casi?

+0

Un corretto tracker delle dipendenze lo farà (ne ho scritto uno nel 1998/9 che lo ha fatto). – TofuBeer

1

Ho scritto un piccolo plug-in di eclissi che prende uno java project esistente nell'area di lavoro. Per ogni classpath entry dei progetti raw classpath è il removes dal classpath del progetto raw e builds the project. Se non lo è problemmarkers con errore di gravità appear on the project, rimuove definitivamente la voce classpath dal percorso di classe raw dei progetti.

Non riesco a condividere quel plug-in, ma non è troppo lavoro per implementarlo da solo con i collegamenti all'api riportati sopra.

Problemi correlati