Does anyone know how to programmaticly find out where the java classloader actually loads the class from?
I often work on large projects where the classpath gets very long and manual searching is not really an option. I recently had a problem where the classloader was loading an incorrect version of a class because it was on the classpath in two different places.
So how can I get the classloader to tell me where on disk the actual class file is coming from?
Edit: What about if the classloader actually fails to load the class due to a version mismatch (or something else), is there anyway we could find out what file its trying to read before it reads it?
Edit just 1st line:
Main
.classOutput:
Maybe bad style but works fine!
Take a look at this similar question. Tool to discover same class..
I think the most relevant obstacle is if you have a custom classloader ( loading from a db or ldap )
Typically, we don't what to use hardcoding. We can get className first, and then use ClassLoader to get the class URL.
Another way to find out where a class is loaded from (without manipulating the source) is to start the Java VM with the option:
-verbose:class
This is what we use:
This will work depending on the ClassLoader implementation:
getClass().getProtectionDomain().getCodeSource().getLocation()