Сканирование файла класса или jar в Java - PullRequest
0 голосов
/ 25 мая 2010

Мне нужно отсканировать файл класса или jar, который реализует или расширяет определенный класс.
Это тот же механизм, который Eclipse использует для сканирования присутствия плагина. Есть способ сделать это?

Ответы [ 3 ]

1 голос
/ 25 мая 2010

С Пример депо: Как загрузить класс, который не находится на пути к классам :

// Create a File object on the root of the directory 
// containing the class file
File file = new File("c:\\class\\");

try {
    // Convert File to a URL
    URL url = file.toURL();          // file:/c:/class/
    URL[] urls = new URL[]{url};

    // Create a new class loader with the directory
    ClassLoader loader = new URLClassLoader(urls);

    // Load in the class; Class.childclass should be located in
    // the directory file:/c:/class/user/information
    Class cls = loader.loadClass("user.informatin.Class");
} catch (MalformedURLException e) {
} catch (ClassNotFoundException e) {
}

При необходимости перечислите файлы в каталоге, используя File.list().

Когда класс загружен, вы можете проверить, реализует ли он определенный интерфейс, выполнив clazz.isInstance. Из документов:

Определяет, является ли указанный Объект совместимым с назначением с объектом, представленным этим Классом. Этот метод является динамическим эквивалентом оператора instanceof языка Java .


Чтобы загрузить классы из jar-файла:

Как загрузить файл JAR во время выполнения

Чтобы вывести список файлов в jar-файле: JarFile.entries().

0 голосов
/ 07 ноября 2012

Вы можете сканировать его без загрузки классов, используя синтаксический анализатор байт-кода, такой как ASM или BCEL. С ASM ...

byte[] bytecode = [read bytes from class or jar file];
ClassReader reader = new ClassReader( bytecode );
String[] interfaces = reader.getInterfaces();
0 голосов
/ 25 мая 2010

Да, есть способы просто сделать это. Посмотрите на документы здесь .

Более конкретные ссылки,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...