在嵌套的.jar中获取.class文件

时间:2011-03-15 19:48:06

标签: java jar ear

我需要获取位于.jar文件中的所有.class文件,而该文件又位于另一个.ear文件中。

我正在尝试使用JarInputStream来访问.ear。这工作正常。但是,当我在JarInputStream中迭代JarEntry元素时,我似乎无法将其作为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?
    }
}

编辑:值得一提的是,上面的代码与我试图以编程方式查找的类位于同一个jar中。

2 个答案:

答案 0 :(得分:3)

您应首先从.ear文件中提取.jar文件,然后尝试读取类文件。

事实上,这就是应用服务器的功能。他们将EAR文件解压缩到一个临时目录中,然后从那里加载类。

答案 1 :(得分:1)

你试过这个吗?

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