动态加载jar
背景
通过UrlClassloader + SPI机制动态加载第三方jar包
代码流程
1、UrlClassloader加载指定目录jar
public ClassLoader getClassLoader() throws Exception {
List<String> filePathList = new ArrayList<>();
filePathList.add("E:\\spi_jar\\openstack-driver-1.0.jar");
filePathList.add("E:\\spi_jar\\docker-driver-1.0.jar");
List<URL> urlList = new ArrayList<>();
for (String path : filePathList) {
File dockerJarFile = new File(path);
urlList.add(dockerJarFile.toURI().toURL());
}
return new URLClassLoader(urlList.toArray(new URL[]{}), Thread.currentThread().getContextClassLoader());
}
2、servicelaoder加载类
public void loadJar() throws Exception{
ServiceLoader<CloudDriver> cloudDrivers = ServiceLoader.load(CloudDriver.class, getClassLoader());
for (CloudDriver cloudDriver : cloudDrivers) {
cloudDriver.createVirtualMachine();
}
}