2012-04-19 12 views
40

Estoy tratando de enumerar el orden en que el cargador de clases Java está cargando mis clases. si utilizo el parámetro -verbose, listaré cada interfaz/clase que cargue, incluidas toneladas de interfaces como Serializable, excepciones, etc. ¿Hay alguna forma de ajustar esta salida para que solo muestre qué clases están cargadas en la clase? Mi método principal es definido?clase verbosa de Java cargando

Respuesta

46

supongo que lo mejor es hacer lo siguiente:

  • salida un texto fijo una vez que sus aperturas main método y justo antes de que termine.
  • Pipe el verbosa de salida en un archivo
  • usar cosas como menos o grep para encontrar las clases cargadas entre las dos etiquetas del método principal.

Hay una pregunta similar y algunas respuestas aquí: Is there a way to get which classes a ClassLoader has loaded?

¿Usted intentó -verbose:class?

4

Aquí hay una expresión sed que analizará el resultado de java -verbose: class para producir pares de nombre de clase cargada y su archivo jar. Puede canalizar un orden para obtener archivos jar únicos. Por ejemplo,

java -verbose:class -version 2>/dev/null | 
    sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' | 
    sort -u 

salidas

/usr/local/jdk1.7.0_67/jre/lib/rt.jar