Java ClassLoader加载.jar
2012-04-09 14:55
435 查看
程序如下:
运行结果如图:
.jar文件结构如下:
这幅图是说,需要在.jar中加入package名字的一个文件夹
是的jar的结构为
-jar含有yerasel(package文件夹),yerasel中含有.class。
加入的方法是:
1. 新建一个新建 WinRAR ZIP archive.zip,(作为浏览器),双击,进入.jar所在的目录
2. 建立目录yerasel,放入.class
3. 将yerasel目录拖入.jar中,进行压缩。
刚刚生成的jar结果图:
可以看到.class外面没有包裹package名字的文件夹
加入目录之后的结果图:
可以看到.class外面包裹着package名字的文件夹。这样.jar才可以被正确加载。
总之,jar就是一种压缩格式,可以用WinRAR来查看,所以可以像上述这样做。
package yerasel; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.HashSet; public class Test { public static Method initAddMethod() { try { Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class }); add.setAccessible(true); return add; } catch (Exception e) { throw new RuntimeException(e); } } public static Method addURL = null; public static URLClassLoader classloader = null; public static void main(String[] args) { /* * 系统加载jar */ try { // 系统ClassLoader只能加载.jar // 动态加载jar addURL = initAddMethod(); classloader = (URLClassLoader)ClassLoader.getSystemClassLoader(); String url = "file:"+ System.getProperty("user.dir") + "/lib/yerasel/GetPI.jar"; // 包路径定义 System.out.println(url); URL classUrl = new URL(url); addURL.invoke(classloader, new Object[] { classUrl }); String className = "yerasel.GetPI"; Class<?> c = Class.forName(className); Object obj = c.newInstance(); // 被调用函数的参数 Class[] parameterTypes = {}; Method method2 = c.getDeclaredMethod("Output",parameterTypes); method2.invoke(obj, null); } catch (Exception exp) { exp.printStackTrace(); } } }
运行结果如图:
.jar文件结构如下:
这幅图是说,需要在.jar中加入package名字的一个文件夹
是的jar的结构为
-jar含有yerasel(package文件夹),yerasel中含有.class。
加入的方法是:
1. 新建一个新建 WinRAR ZIP archive.zip,(作为浏览器),双击,进入.jar所在的目录
2. 建立目录yerasel,放入.class
3. 将yerasel目录拖入.jar中,进行压缩。
刚刚生成的jar结果图:
可以看到.class外面没有包裹package名字的文件夹
加入目录之后的结果图:
可以看到.class外面包裹着package名字的文件夹。这样.jar才可以被正确加载。
总之,jar就是一种压缩格式,可以用WinRAR来查看,所以可以像上述这样做。
相关文章推荐
- Java ClassLoader加载.jar
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- Android 安全——Java环境动态加载Jar之ClassLoader预热
- Java ClassLoader加载.jar包中的Class
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- Java ClassLoader加载.jar
- 运用URLClassLoader加载外部jar包的java类,生成Class文件
- jar的类加载器 Java.lang.ClassLoader
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- 探索《How Tomcat Work》 心得(六) 加载器 下 Java中URL、tomcat加载器WebappLoader和WebappClassLoader
- Java 动态加载jar和class文件
- Android DexClassLoader/PathClassLoader 动态加载jar/APK
- java 的类加载机制(classloader)
- java加载类的方法1.classloader 2.class.forName()
- Java中class是如何加载到JVM中的(Class.forName("name")和ClassLoader.loadClass("name")的区别)
- URLClassloader-&gt;sun.misc.InvalidJarIndexException&amp;java.util.zip.ZipException
- Java Class的热替换 自定义ClassLoader加载.class