9 ответов:
к сожалению, Java не предоставляет простой способ перечислить классы в "родной" JRE. Это оставляет вам несколько вариантов: (a) для любого данного файла JAR вы можете перечислить записи внутри этого файла JAR, найти
.classфайлы, а затем определить, какой класс java каждый.classфайл представляет; или (b) вы можете использовать библиотеку, которая делает это за вас.опция (a): сканирование файлов JAR вручную
в этом варианте мы будем заполнять
classNamesсо списком всех Java классы, содержащиеся в файле jar по адресу/path/to/jar/file.jar.List<String> classNames = new ArrayList<String>(); ZipInputStream zip = new ZipInputStream(new FileInputStream("/path/to/jar/file.jar")); for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) { if (!entry.isDirectory() && entry.getName().endsWith(".class")) { // This ZipEntry represents a class. Now, what class does it represent? String className = entry.getName().replace('/', '.'); // including ".class" classNames.add(className.substring(0, className.length() - ".class".length())); } }опция (b): использование специализированных библиотек отражений
гуавы
гуавы имеет
ClassPathпо крайней мере, с 14.0, который я использовал и любил. Одна хорошая вещь оClassPathзаключается в том, что он не загружает найденные классы, что важно при сканировании большого количества классов.ClassPath cp=ClassPath.from(Thread.currentThread().getContextClassLoader()); for(ClassPath.ClassInfo info : cp.getTopLevelClassesRecurusive("my.package.name")) { // Do stuff with classes here... }размышления
у меня нет лично использовал размышления библиотека, но он, кажется, популярен. Некоторые отличные примеры представлены на веб-сайте, как этот быстрый способ загрузить все классы в пакете, предоставленном любой jar-файл, который также может быть полезен для вашего приложения.
Reflections reflections = new Reflections("my.project.prefix"); Set<Class<? extends SomeType>> subTypes = reflections.getSubTypesOf(SomeType.class); Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(SomeAnnotation.class);
Вы можете использовать Java . Перечислите содержимое файла jar в txt-файле, и вы можете увидеть все классы в jar.
jar tvf jarfile.jar
может быть, вы ищете
jarкоманда для получения списка классов в терминале,$ jar tf ~/.m2/repository/org/apache/spark/spark-assembly/1.2.0-SNAPSHOT/spark-assembly-1.2.0-SNAPSHOT-hadoop1.0.4.jar META-INF/ META-INF/MANIFEST.MF org/ org/apache/ org/apache/spark/ org/apache/spark/unused/ org/apache/spark/unused/UnusedStubClass.class META-INF/maven/ META-INF/maven/org.spark-project.spark/ META-INF/maven/org.spark-project.spark/unused/ META-INF/maven/org.spark-project.spark/unused/pom.xml META-INF/maven/org.spark-project.spark/unused/pom.properties META-INF/NOTICEздесь
-t list table of contents for archive -f specify archive file nameили, просто grep выше результата, чтобы увидеть
.classтолько ES$ jar tf ~/.m2/repository/org/apache/spark/spark-assembly/1.2.0-SNAPSHOT/spark-assembly-1.2.0-SNAPSHOT-hadoop1.0.4.jar | grep .class org/apache/spark/unused/UnusedStubClass.classчтобы увидеть количество
classЭсjar tvf launcher/target/usergrid-launcher-1.0-SNAPSHOT.jar | grep .class | wc -l 61079
это хак я использую:
можно использовать
javaавтозаполнение вот так:java -cp path_to.jar <Tab>это даст вам список классов, доступных для передачи в качестве начального класса. Конечно, попытка использовать тот, который не имеет основного файла, ничего не сделает, но вы можете увидеть, что
javaдумает, что классы внутри.jarназываются.
ниже команда будет перечислять содержимое jar.
: -unzip -l jarfilename.jar.образец o / p: -
Archive: hello-world.jar Length Date Time Name --------- ---------- ----- ---- 43161 10-18-2017 15:44 hello-world/com/ami/so/search/So.class 20531 10-18-2017 15:44 hello-world/com/ami/so/util/SoUtil.class --------- ------- 63692 2 filesсогласно руководству
unzip-L список архивных файлов (короткий формат). Имена, несжатые размеры файлов и даты и время изменения указанных файлов являются печатается вместе с итогами для всех указанные файлы. Если распаковать был скомпилирован с помощью OS2_EAS определено, параметр-l также содержит столбцы для размеров сохраненной OS / 2 расширенные атрибуты (EAs) и доступ к OS/2 контрольные списки (ACL). Кроме того, отображаются комментарии к zipfile и отдельным файлам (если таковые имеются). Если файл был архивируется из Единой файловой системы (например, старая файловая система MS-DOS FAT) и был задан параметр-L, имя файла преобразуется в нижний регистр и является префикс с кареткой (^).
можно попробовать:
jar tvf jarfile.jarЭто будет полезно только в том случае, если ваш jar является исполняемым т. е. в манифесте вы определили некоторый класс как основной класс
вы можете попробовать это :
unzip -v /your/jar.jarЭто будет полезно только в том случае, если ваш jar является исполняемым т. е. в манифесте вы определили некоторый класс как основной класс
описание: Eclipse IDE можно использовать для этого, создав пример проекта java и добавив все банки в путь сборки проекта
шаги:
создайте пример проекта Eclipse Java.
все все банки у вас есть в своем пути сборки
CTRL + SHIFT+T и введите полное имя класса .
результаты будут отображаться в окно со всеми банками, имеющими этот класс. Смотрите прилагаемое изображение .

Comments