java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中

java代码实现利用 classloader 动态加载 jar包、文件夹到classpath中

在项目中实现了一个工具(独立运行的Java工程,打成jar包后 通过 java -jar **.jar 执行的。),该工具通过配置能够实现一些业务功能,
并且该工具提供了接口与抽象类,供其他人扩展它的功能。

这就涉及到一个问题:别人在扩展它的时候,需要引入一些jar或者配置文件,本来工具依赖的jar和配置文件都记录在manifest文件中了,
不可能别人加了jar包和配置文件就要修改manifest文件的。
所以我为工具提供了另外一个入口,通过 该通过的配置文件 进行配置 路径,由于考虑到扩展的人可能多人或者多组,所以配置文件如下定义:
以ext_classpath开头的,诸如 ext_classpath_biz1等对应的路径均被加入到classpath中。
以ext_resourcepath开头的,诸如 ext_resourcepath_biz1等对应的路径均被加入classpath中。

代码实现如下:

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中package  com.bz.utils;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
import  java.io.File;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
import  java.lang.reflect.Method;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
import  java.net.URL;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
import  java.net.URLClassLoader;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
import  java.util.List;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中  * 根据properties中配置的路径把jar和配置文件加载到classpath中。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中  * 
@author  jnbzwm
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中  *
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中  
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
public   final   class  ExtClasspathLoader  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**  URLClassLoader的addURL方法  */
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static  Method addURL  =  initAddMethod();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static  URLClassLoader classloader  =  (URLClassLoader) ClassLoader.getSystemClassLoader();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 初始化addUrl 方法.
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@return  可访问addUrl方法的Method对象
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static  Method initAddMethod()  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
try   java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             Method add 
=  URLClassLoader. class .getDeclaredMethod( " addURL " new  Class[]  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 { URL. class  } );
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             add.setAccessible(
true );
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             
return  add;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
catch  (Exception e)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             
throw   new  RuntimeException(e);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 加载jar classpath。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
public   static   void  loadClasspath()  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         List
< String >  files  =  getJarFiles();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
for  (String f : files)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             loadClasspath(f);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         List
< String >  resFiles  =  getResFiles();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
for  (String r : resFiles)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             loadResourceDir(r);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static   void  loadClasspath(String filepath)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         File file 
=   new  File(filepath);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         loopFiles(file);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static   void  loadResourceDir(String filepath)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         File file 
=   new  File(filepath);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         loopDirs(file);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**     
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 循环遍历目录,找出所有的资源路径。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@param  file 当前遍历文件
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static   void  loopDirs(File file)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
//  资源文件只加载路径
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
         if  (file.isDirectory())  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             addURL(file);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             File[] tmps 
=  file.listFiles();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             
for  (File tmp : tmps)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中                 loopDirs(tmp);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**     
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 循环遍历目录,找出所有的jar包。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@param  file 当前遍历文件
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static   void  loopFiles(File file)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
if  (file.isDirectory())  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             File[] tmps 
=  file.listFiles();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             
for  (File tmp : tmps)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中                 loopFiles(tmp);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
else   java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             
if  (file.getAbsolutePath().endsWith( " .jar " ||  file.getAbsolutePath().endsWith( " .zip " ))  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中                 addURL(file);
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 通过filepath加载文件到classpath。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@param  filePath 文件路径
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@return  URL
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@throws  Exception 异常
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static   void  addURL(File file)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
try   java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中             addURL.invoke(classloader, 
new  Object[]  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 { file.toURI().toURL() } );
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
catch  (Exception e)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 从配置文件中得到配置的需要加载到classpath里的路径集合。
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@return
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static  List < String >  getJarFiles()  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
//  TODO 从properties文件中读取配置信息略
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
         return   null ;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
/** */ /**
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 从配置文件中得到配置的需要加载classpath里的资源路径集合
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      * 
@return
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中      
*/

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
private   static  List < String >  getResFiles()  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         
// TODO 从properties文件中读取配置信息略
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
         return   null ;
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     
public   static   void  main(String[] args)  java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 {
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中         ExtClasspathLoader.loadClasspath();
java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中     }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中 }

java代码兑现利用 classloader 动态加载 jar包、文件夹到classpath中