Domanda

Potrebbe non essere la migliore pratica, ma ci sono modi per rimuovere unsused classi da parte di un soggetto terzo file jar.Qualcosa che assomiglia al modo in cui le mie lezioni sono in biblioteca e non un qualche tipo di analisi di copertura, poi sputa fuori un altro vaso con tutte le incontaminata classi rimosso.

Ovviamente non ci sono problemi con questo.In particolare, lo scenario di utilizzo, l'ho messo anche se non può utilizzare tutte le classi per tutto il tempo.

Ma trascurare questi problemi, può essere fatto in linea di principio?

È stato utile?

Soluzione

C'è un modo.

Il JarJar progetto di questo AFAIR.Il primo obiettivo del JarJar progetto è quello di consentire uno per incorporare le librerie di terze parti nel vostro vaso, cambiando la struttura del pacchetto, se necessario.Così facendo si può rimuovere le classi che non sono necessari.

Check it out a http://code.google.com/p/jarjar/.

Qui c'è un link sulla compattazione dei vasetti: http://sixlegs.com/blog/java/jarjar-keep.html

Altri suggerimenti

C'è uno strumento in Formica chiamato classfileset.Si specifica l'elenco di root classi che sai che hai bisogno, e quindi il classfileset, in modo ricorsivo, analizza il loro codice per trovare tutte le dipendenze.

In alternativa, si potrebbe sviluppare una buona suite di test che esercita tutte le funzioni che avete bisogno di, quindi eseguire il test in una prova di strumento di copertura.Lo strumento indica che le classi (e di istruzione di loro) sono stati effettivamente utilizzati.Questo potrebbe dare un più piccolo set di codice rispetto a quello che ci si trova di analisi statica.

Io uso ProGuard per questo.Oltre a essere un ottimo obfuscator, ha un codice di compattazione fase che può combinare più Vasetti e poi togliere tutti inutilizzati classi o i membri della classe.Non un eccellente lavoro al restringimento.

In un lavoro precedente, ho usato un Java obfuscator che così come offuscamento del codice, rimosso anche le classi e i metodi che non sono stati utilizzati.Se si stavano facendo la "Classe".byName" o qualsiasi altro tipo di riflessione roba, è necessario dire al obfuscator perché non riusciva a dire, ispezionando il codice delle classi o metodi chiamati dalla riflessione.

Il problema, naturalmente, è che non so se in altre parti della libreria di terze parti, sta facendo qualche riflessione, e così la rimozione di un "inutilizzati" classe potrebbe essere causa di rottura, in un oscuro caso che non hai testato.

jar è solo un file zip, quindi credo che si può.Se si potesse arrivare alla sorgente, è più pulito.Magari provare a smontare la classe?

Aggiungendo a questa domanda, è possibile migliorare le prestazioni?Dal momento che le classi non utilizzato non sarebbe JIT compilato migliorare il tempo di avvio o il java automaticamente rilevare che, mentre compilato in bytecode e non anche con il codice che non viene utilizzato?

Questo sarebbe un progetto interessante (qualcuno ha già fatto?)

Presumo che tu facessi lo strumento barattolo(s) come un punto di partenza, e la libreria jar da pulire.Si potrebbe utilizzare la reflection per determinare quali classi tuo jar(s) riferimento direttamente, e che sono utilizzati indirettamente giù la chiamata albero (questo non è affatto banale, ma fattibile).Se si incontra ogni riflessione di codice in uno dei due luoghi, si dovrebbe dare un forte messaggio di avviso.

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