Вот пример:
package foo;
public class Test
{
public static void main(String[] args)
{
ClassLoader loader = Test.class.getClassLoader();
System.out.println(loader.getResource("foo/Test.class"));
}
}
Это распечатало:
file:/C:/Users/Jon/Test/foo/Test.class
Другой способ узнать, где класс загружается из (не управляя источником) состоит в том, чтобы запустить Java VM с опции: -verbose:class
getClass().getProtectionDomain().getCodeSource().getLocation();
Это - то, что мы используем:
public static String getClassResource(Class<?> klass) {
return klass.getClassLoader().getResource(
klass.getName().replace('.', '/') + ".class").toString();
}
Это будет работать в зависимости от реализации ClassLoder: getClass().getProtectionDomain().getCodeSource().getLocation()
Предположение, что Вы работаете с классом, названным MyClass
, следующее, должно работать:
MyClass.class.getClassLoader();
, Можно ли получить дисковое местоположение .class файла, зависит от самого classloader. Например, при использовании чего-то как BCEL определенный класс даже не может иметь дискового представления.
Смотрите на этот подобный вопрос. Инструмент для обнаружения того же класса..
я думаю, что самое соответствующее препятствие состоит в том, если у Вас есть пользовательский classloader (загружающийся от дб или ldap)