2012-04-19 6 views
40

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

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