使用classloader动态加载jar包

public static void loadJar(String path){
    // 系统类库路径  
    File libPath = new File(path);  
      
    // 获取所有的.jar和.zip文件  
    File[] jarFiles = libPath.listFiles(new FilenameFilter() {  
        public boolean accept(File dir, String name) {  
            return name.endsWith(".jar") || name.endsWith(".zip");  
        }  
    });
      
    if (jarFiles != null) {  
        // 从URLClassLoader类中获取类所在文件夹的方法  
        // 对于jar文件,可以理解为一个存放class文件的文件夹  
        Method method = null;
        try {
            method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
        } catch (NoSuchMethodException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (SecurityException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }  
        boolean accessible = method.isAccessible();     // 获取方法的访问权限  
        try {  
            if (accessible == false) {  
                method.setAccessible(true);     // 设置方法的访问权限  
            }  
            // 获取系统类加载器  
            URLClassLoader classLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();;  
            for (File file : jarFiles) {
                try {  
                    URL url = file.toURI().toURL(); 
                    method.invoke(classLoader, url);    
                    System.out.println("读取jar文件成功"+file.getName());
                } catch (Exception e) {  
                    System.out.println("读取jar文件失败");
                }  
            }  
        } finally {  
            method.setAccessible(accessible);  
        }  
    }  
}

你可能感兴趣的:(使用classloader动态加载jar包)