Получение списка всех классов, используемых при выполнении JAVA-приложения?

Неважно существует установка для этого.

Окно-> Поведение-> (Системное меню Появляется на флажке Alt+SPACE)

5
задан knorv 5 October 2009 в 20:52
поделиться

3 ответа

Запустить java с флагом verbose: class

java -verbose:class com.package.Foo

Чтобы добавить его в файл:

java -verbose:class com.package.Foo > classes-used.txt

и т. д.

Он также перечисляет банку, в которой определены эти файлы:

Например, для этого класса

public class Test {
     public static void main( String [] args ) {
     }
}

у меня есть (среди прочего)

$ java -verbose:class Test 
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/classes.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/ui.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/laf.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/jsse.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/jce.jar]
[Opened /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Classes/charsets.jar]
[Loaded java.lang.Object from shared objects file]
[Loaded java.io.Serializable from shared objects file]
[Loaded java.lang.Comparable from shared objects file]
[Loaded java.lang.CharSequence from shared objects file]
[Loaded java.lang.String from shared objects file]
[Loaded java.lang.reflect.GenericDeclaration from shared objects file]
[Loaded java.lang.reflect.Type from shared objects file]
[Loaded java.lang.reflect.AnnotatedElement from shared objects file]
[Loaded java.lang.Class from shared objects file]
[Loaded java.lang.Cloneable from shared objects file]
[Loaded java.lang.ClassLoader from shared objects file]
[Loaded java.lang.System from shared objects file]
13
ответ дан 18 December 2019 в 11:58
поделиться

Я полагаю, вы также можете использовать Jakarta Commons Discovery с кодом, подобным следующему:

ResourceNameIterator classes = new DiscoverClasses().findResourceClasses(Object.class);
while (classes.hasNext()) {
    String className = classes.nextResourceClass().getName();
    Class clazz = classes.nextResourceClass().loadClass();
}
1
ответ дан 18 December 2019 в 11:58
поделиться

Вы можете сделать что-нибудь в этом роде:

1) Включите подробную загрузку классов, передав -verbose: class в командной строке Java.

Это напечатает строку вроде

[Loaded org.foo.Bar from file:XYZ.jar]

для каждый класс загружен.

2) Постобработка вывода текстовыми утилитами * nix (grep, sed и т. д.), чтобы найти все экземпляры этих сообщений и извлечь и отсортировать имена классов

1
ответ дан 18 December 2019 в 11:58
поделиться
Другие вопросы по тегам:

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