Получить файлы .class во вложенном файле .jar - PullRequest
0 голосов
/ 15 марта 2011

Мне нужно получить все файлы .class, расположенные в файле .jar, который, в свою очередь, находится в другом файле .ear.

Я пытаюсь использовать JarInputStream для получения доступа к .ear. Это работает нормально. Однако, когда я перебираю элементы JarEntry внутри JarInputStream, я не могу открыть его как файл Jar для чтения любых элементов .class внутри него.

JarInputStream jarFile = new JarInputStream(new FileInputStream("c:/path/to/my/.ear"));

JarEntry jarEntry = null;

while(true) {

    jarEntry = jarFile.getNextJarEntry();

    if(jarEntry == null) {
        break;
    }

    if((jarEntry.getName().endsWith(".jar"))) {
        //Access to the nested jar?
    }
}

Отредактировано: стоит упомянуть, что приведенный выше код находится в том же банке, что и классы, которые я пытаюсь найти программно.

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Сначала вы должны извлечь файл .jar из файла .ear, а затем попытаться прочитать файл класса.

Фактически, так делают даже серверы приложений.Они извлекают файл EAR во временный каталог, а затем загружают классы оттуда.

1 голос
/ 15 марта 2011

Вы пробовали это?

[...]    
    if((jarEntry.getName().endsWith(".jar"))) {
        JarInputStream subJarStream = new JarInputStream(jarFile);
        // the same search again
    }
...