我花了很多时间来完成一项任务,“读取一个存储在一个包含在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代码,但我没有看到任何反射调用。所以,我现在迷失了。我是否构建了错误的网址?
有什么建议吗?
答案 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类来读取类文件等。所以,到目前为止,我将使用该解决方案,直到我提出不同的解决方案。
如果我真的找到了解决方案,我会在这里发布。
感谢所有的帮助, 富