Sto tentando di elencare l'ordine in cui il caricatore di classi Java sta caricando le mie classi. se uso il parametro -verbose
elencherà ogni singola interfaccia/classe che carica, incluse tonnellate di interfacce come Serializable, eccezioni ecc. C'è un modo per modificare questo output in modo che mostri solo quali classi sono caricate nella classe il mio metodo principale è definito?Classe Java prolisso caricamento
40
A
risposta
46
penso che la cosa migliore è di fare quanto segue:
- uscita del testo fisso una volta che i metodi
main
inizia e giusto prima della fine. - tubo del verbose output in un file
- usare cose come meno o grep per trovare le classi caricate tra i due tag dal metodo principale.
C'è una domanda simile e alcune risposte qui: Is there a way to get which classes a ClassLoader has loaded?
Hai provato -verbose:class
?
4
Ecco un'espressione di sed che analizzerà l'output di java -verbose: class per produrre coppie di nomi di classi caricati e il relativo file jar. È possibile inoltrare ulteriormente un ordinamento per ottenere file jar esclusivi. Per esempio,
java -verbose:class -version 2>/dev/null |
sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' |
sort -u
uscite
/usr/local/jdk1.7.0_67/jre/lib/rt.jar