Найдите, где класс Java загружается из

171
задан Naman 20 September 2017 в 14:05
поделиться

6 ответов

Вот пример:

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
177
ответ дан Jon Skeet 23 November 2019 в 20:43
поделиться

Другой способ узнать, где класс загружается из (не управляя источником) состоит в том, чтобы запустить Java VM с опции: -verbose:class

94
ответ дан xyz 23 November 2019 в 20:43
поделиться
getClass().getProtectionDomain().getCodeSource().getLocation();
72
ответ дан sgokhales 23 November 2019 в 20:43
поделиться

Это - то, что мы используем:

public static String getClassResource(Class<?> klass) {
  return klass.getClassLoader().getResource(
     klass.getName().replace('.', '/') + ".class").toString();
}

Это будет работать в зависимости от реализации ClassLoder: getClass().getProtectionDomain().getCodeSource().getLocation()

26
ответ дан David Dossot 23 November 2019 в 20:43
поделиться

Предположение, что Вы работаете с классом, названным MyClass, следующее, должно работать:

MyClass.class.getClassLoader();

, Можно ли получить дисковое местоположение .class файла, зависит от самого classloader. Например, при использовании чего-то как BCEL определенный класс даже не может иметь дискового представления.

-1
ответ дан Daniel Spiewak 23 November 2019 в 20:43
поделиться

Смотрите на этот подобный вопрос. Инструмент для обнаружения того же класса..

я думаю, что самое соответствующее препятствие состоит в том, если у Вас есть пользовательский classloader (загружающийся от дб или ldap)

1
ответ дан Community 23 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: