美文网首页
使用classloader动态加载jar包

使用classloader动态加载jar包

作者: 吐痰高手 | 来源:发表于2017-11-08 22:14 被阅读156次
    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包

          本文链接:https://www.haomeiwen.com/subject/girumxtx.html