I could not find a clear answer to this question elsewhere, so I\'ll try here:
Is there some way (programmatic or other) to get a list of JARs/classes loaded by an A
As an alternative way, you can use this code snippet. The result is a file that consist of related jar files to a class-loader and class files that are loaded by an object's class-loaders (chain of class-loaders including its parents until root class-loader). Class-loaders are seperated by stars.
Object obj = this;
ClassLoader classLoader = obj.getClass().getClassLoader();
File file = new File("classlodersClassesJars.txt");
if(file.exists()) {
file.delete();
}
if(classLoader != null) { // to escape from system classes that are loaded by bootstrap class-loader such as String.
do {
try {
Class clClass = classLoader.getClass();
while(clClass != ClassLoader.class){
clClass = clClass.getSuperclass();
}
java.lang.reflect.Field domainField = clClass.getDeclaredField("domains");
java.lang.reflect.Field classesField = clClass.getDeclaredField("classes");
domainField.setAccessible(true);
classesField.setAccessible(true);
HashSet domains = (HashSet) domainField.get(classLoader);
Vector classes = (Vector) classesField.get(classLoader);
FileOutputStream fos = new FileOutputStream("classlodersClassesJars.txt", true);
fos.write(("\n******************** " + classLoader.toString() + "\n").getBytes());
fos.write(Arrays.toString(classes.toArray()).getBytes());
Object[] reverseDomains = domains.toArray();
org.apache.commons.lang.ArrayUtils.reverse(reverseDomains);
fos.write(Arrays.toString(reverseDomains).getBytes());
fos.close();
classLoader = classLoader.getParent();
} catch (Exception exception) {
exception.printStackTrace();
// TODO
}
} while (classLoader.getParent() != null);
}