概述如何在Windows上反映JAR中的类
假设下面的loader定义(这个例子是用scala编写的,但是和Java几乎一样,所以你应该很容易理解这个问题) :
jar = new file(\”path/to/myjar.jar\”) url = jar.toURI.toURL urls = Array[URL](url) // just a single-element array containing the url loader = new urlclassloader(urls)
JAR myjar.@R_301_6476@含org/pack/Simple.class 。 Simple具有标准的org.pack包,通过JavaCompiler编译并打包到JAR中。 JAR是正确的(可执行文件等)
在linux上, loader.loadClass(\”org.pack.Simple\”)返回正确的Class对象。
在windows上,它抛出一个ClassNotFoundException 。 当然,我使用而不是/作为文件分隔符。
从JAR内读取文件不能在windows上工作
Java Class.isAssignableFrom总是返回false …只在IDE之外
我做错了什么? 或者只是窗户吸? 我安装了OracleJDK8,并将其bin/文件夹添加到path 。
EDIT1:
如果我将JAR解压到某个目录,并让ClassLoader从指向该目录的URL读取,则一切正常。 这怎么可能?
我昨天一直在努力解决这个问题,但经过长时间的Google会议,我偶然发现了这个解决方案。
您指定的URL对象必须如下创建:
urlclassloader.addURL(new file(pathParam).toURI().toURL());
或者在构造函数中如下所示:
new urlclassloader(new URL[]{new file(pathParam).toURI().toURL()},this.getClass().getClassLoader());
请注意,构造函数具有父类加载器作为参数。
为loadClass()方法。 你需要确保类的路径是二进制格式(就像你已经做的那样)。
由于某种原因,即使我使用URL(String)构造函数创建一个URL对象,它也不起作用。
如果你去查看java.lang.classLoader超类,你会注意到它默认抛出一个异常。 这就是为什么类加载器很重要。
protected Class<?> findClass(String name) throws ClassNotFoundException { throw new ClassNotFoundException(name); }
总结
以上是内存溢出为你收集整理的如何在Windows上反映JAR中的类全部内容,希望文章能够帮你解决如何在Windows上反映JAR中的类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容