java动态加载jar,class
2014-10-28 17:40
260 查看
package com.test; import java.io.File; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.List; /** * 根据properties中配置的路径把jar和配置文件加载到classpath中。 * @author * */ public final class ExtClasspathLoader { /** URLClassLoader的addURL方法 */ private static Method addURL = initAddMethod(); private static URLClassLoader classloader = (URLClassLoader) ClassLoader.getSystemClassLoader(); /** * 初始化addUrl 方法. * @return 可访问addUrl方法的Method对象 */ private 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); } } /** * 加载jar classpath。 */ public static void loadClasspath() { List<String> files = getJarFiles(); for (String f : files) { loadClasspath(f); } List<String> resFiles = getResFiles(); for (String r : resFiles) { loadResourceDir(r); } } public static void loadClasspath(String filepath) { File file = new File(filepath); loopFiles(file); } private static void loadResourceDir(String filepath) { File file = new File(filepath); loopDirs(file); } /** * 循环遍历目录,找出所有的资源路径。 * @param file 当前遍历文件 */ private static void loopDirs(File file) { // 资源文件只加载路径 if (file.isDirectory()) { addURL(file); File[] tmps = file.listFiles(); for (File tmp : tmps) { loopDirs(tmp); } } } /** * 循环遍历目录,找出所有的jar包。 * @param file 当前遍历文件 */ private static void loopFiles(File file) { if (file.isDirectory()) { File[] tmps = file.listFiles(); for (File tmp : tmps) { loopFiles(tmp); } } else { if (file.getAbsolutePath().endsWith(".jar") || file.getAbsolutePath().endsWith(".zip")) { addURL(file); } } } /** * 通过filepath加载文件到classpath。 * @param filePath 文件路径 * @return URL * @throws Exception 异常 */ private static void addURL(File file) { try { addURL.invoke(classloader, new Object[] { file.toURI().toURL() }); } catch (Exception e) { } } /** * 从配置文件中得到配置的需要加载到classpath里的路径集合。 * @return */ private static List<String> getJarFiles() { // TODO 从properties文件中读取配置信息略 return null; } /** * 从配置文件中得到配置的需要加载classpath里的资源路径集合 * @return */ private static List<String> getResFiles() { //TODO 从properties文件中读取配置信息略 return null; } public static void main(String[] args) throws Exception{ // ExtClasspathLoader.loadClasspath(); URLClassLoader cl= (URLClassLoader) ClassLoader.getSystemClassLoader(); System.out.println(cl.getClass()); System.out.println(ClassLoader.getSystemClassLoader().getClass()); ExtClasspathLoader.loadClasspath("c:/c.jar"); Class.forName("com.zte.esb.utils.TokenizerMapper"); // sun.misc.Launcher$AppClassLoader.addURL(java.net.URL) } }
相关文章推荐
- Java 动态加载jar和class文件
- Java 动态加载jar和class文件实例解析
- Java中动态加载jar文件和class文件
- Java中动态加载jar文件和class文件
- [转载] Java中动态加载jar文件和class文件
- java动态加载指定的类或者jar包反射调用其方法-涉及其他jar中的类就报ClassNotFound问题分析及解决思路
- Java中动态加载jar文件和class文件
- Android 安全——Java环境动态加载Jar之ClassLoader预热
- Java动态加载jar及class文件
- java动态加载指定的类或者jar包反射调用其方法-涉及其他jar中的类就报ClassNotFound问题分析及解决思路
- java代码实现利用 classloader 动态加载 jar包、文件夹到classpath中
- Java_Java中动态加载jar文件和class文件
- Java运行时动态加载类之ClassLoader加载class及其依赖jar包
- ClassLoader和动态加载Jar包举例
- Java中class文件的动态加载
- java动态加载jar包(推荐二)
- class 类与jar 包的动态加载
- 【java】动态加载类-URLClassLoader
- java项目bat文件再运行时动态加载jar包
- java 源代码中动态加载JAR文件中的类