首页 / JAVA / java – 从jar加载一个类
java – 从jar加载一个类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从jar加载一个类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2123字,纯文字阅读大概需要4分钟。
内容图文
![java – 从jar加载一个类](/upload/InfoBanner/zyjiaocheng/778/dcd6d8e565d04cdd8b72694318379c06.jpg)
我正在尝试从jar加载一个类,我正在使用classLoader.
我有这部分代码用于准备classLoader:
private void loadClass(){
try{
JarFile jarFile = new JarFile( Path);
Enumeration e = jarFile.entries();
URL[] urls = { new URL("jar:file:" + Path +"!/") };
classLoader = URLClassLoader.newInstance(urls);
} catch (MalformedURLException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
现在我加载一个类,然后尝试获取一个新实例
....
loadClass();
Class device = classLoader.loadClass( "org.myPackage.MyClass");
MyMotherClass Device = ( MyMotherClass) device.newInstance();
...
MyClass扩展了MyMotherClass,当我执行classLoader.loadClass(“org.myPackage.MyClass”)时,MyMotherClass位于classLoader中.
此刻,没事.
现在,在device.newInstance()中,我得到一个例外.问题是MyClass使用的其他类不在类路径中.
我能做什么?
我有另一个方法,在classLoader中加载所有需要的类,但是当我得到新实例时不起作用.
我不能改变MyClass和其他人
解决方法:
这是我用来在运行时动态加载jar的一些代码.我利用反射来规避你不应该这样做的事实(也就是说,在JVM启动后修改类路径).只需将my.proprietary.exception更改为合理的内容即可.
/*
* Adds the supplied library to java.class.path.
* This is benign if the library is already loaded.
*/
public static synchronized void loadLibrary(java.io.File jar) throws my.proprietary.exception
{
try {
/*We are using reflection here to circumvent encapsulation; addURL is not public*/
java.net.URLClassLoader loader = (java.net.URLClassLoader)ClassLoader.getSystemClassLoader();
java.net.URL url = jar.toURI().toURL();
/*Disallow if already loaded*/
for (java.net.URL it : java.util.Arrays.asList(loader.getURLs())){
if (it.equals(url)){
return;
}
}
java.lang.reflect.Method method = java.net.URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{java.net.URL.class});
method.setAccessible(true); /*promote the method to public access*/
method.invoke(loader, new Object[]{url});
} catch (final NoSuchMethodException |
java.lang.IllegalAccessException |
java.net.MalformedURLException |
java.lang.reflect.InvocationTargetException e){
throw new my.proprietary.exception(e.getMessage());
}
}
内容总结
以上是互联网集市为您收集整理的java – 从jar加载一个类全部内容,希望文章能够帮你解决java – 从jar加载一个类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。