I am trying to list the order in which the Java class loader is loading my classes. if I use -verbose parameter it will list every single interface/class it loads, including tons of interfaces such as Serializable, exceptions etc. Is there a way to tweak this output so it only shows which classes are loaded in the class my main method is defined?
Asked
Active
Viewed 1e+01k times
71
Alexander Oh
- 22,307
- 12
- 71
- 72
Bober02
- 14,688
- 31
- 87
- 168
2 Answers
73
I guess your best bet is to do the following:
- Output some fixed text once your
mainmethod starts and right before it ends. - Pipe the verbose output into a file
- Use things like less or grep to find the classes loaded between the two tags from the main method.
There's a similar question and some answers here: Is there a way to get which classes a ClassLoader has loaded?
Did you try -verbose:class?
-
1In case anyone is wondering where this is documented: https://docs.oracle.com/en/java/javase/11/tools/java.html – Renato Jul 01 '21 at 13:30
14
Here's a sed expression that will parse the output of java -verbose:class to produce pairs of loaded class name and its jar file. You can further pipe through a sort to get unique jar files. For example,
java -verbose:class -version 2>/dev/null |
sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' |
sort -u
outputs
/usr/local/jdk1.7.0_67/jre/lib/rt.jar
Nicholas Sushkin
- 12,000
- 3
- 28
- 19