读取在Zip文件中打包的Jar中的类

时间:2014-08-29 14:00:16

标签: java reflection urlclassloader

我花了很多时间来完成一项任务,“读取一个存储在一个包含在Zipfile中的Jar中的类文件”,并且总是返回到同一个ClassNotFoundException。我正在寻求关于如何进行的一些指导。我在各种网站上阅读了许多有用的链接,但是因为一项艰巨的任务或我缺乏知识而继续遇到问题。

基本上,我的代码成功读取读取Zipfile,创建JarInputstream并找到我请求的类文件。我的问题是,当代码执行该行时找到该文件,cl.loadClass(className)抛出ClassNotFoundException

URL jarUrl = new URL("jar:file:/E:/temp/ZipTest/JarTest_08262014/JarTest3.zip!/activation.jar!/com/sun/activation/viewers/ImageViewer.class"); 
URLClassLoader cl = URLClassLoader.newInstance(new URL[] {jarUrl });
className= "com/sun/activation/viewers/ImageViewer.class";
Class loadedClass = cl.loadClass(className);   

一旦我加载了类,我就可以使用反射方法来读取类文件。我写了一个类,它在读取位于目录中的jar文件时起作用。

我查看了OpenJDK javap代码,但我没有看到任何反射调用。所以,我现在迷失了。我是否构建了错误的网址?

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为您使用URLClassloader错误。 尝试使用仅指向JAR文件的URL。 URLClassloader默认不允许使用嵌套的JAR。

此外: 不要指定班级文件

意思是:

className= "com/sun/activation/viewers/ImageViewer.class";

应该是:

className= "com.sun.activation.viewers.ImageViewer";

答案 1 :(得分:0)

早上好,

我只想提供更新。

我花了更多时间探索其他线程等,但决定将Zip文件从Zip解压缩到临时目录。我可以成功地使用R eflection类来读取类文件等。所以,到目前为止,我将使用该解决方案,直到我提出不同的解决方案。

如果我真的找到了解决方案,我会在这里发布。

感谢所有的帮助, 富