java8 动态加载jar包至系统的classpath
1. io.test包
创建MyMain.java
类,创建addJarToClasspath
方法将jar包动态加载进系统的classpath中
package io.test;import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Method;public class MyMain {public static void addJarToClasspath(String jarFilePath) throws Exception {File file = new File(jarFilePath);URL url = file.toURI().toURL();// 获取当前线程的类加载器URLClassLoader classLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();// 通过反射调用 URLClassLoader 的 addURL 方法Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);method.setAccessible(true);method.invoke(classLoader, url);}public static void main(String[] args) {try {addJarToClasspath("path\\\to\\\\adder.jar");System.out.println("JAR file added to classpath.");} catch (Exception e) {e.printStackTrace();}MyAdder adder = new MyAdder();System.out.println(adder.add());}
}
创建MyAdder.java
类,该类中会调用动态加载至classpath的jar包中的类
package io.test;
import org.calculation.Adder;public class MyAdder {Adder adder = new Adder();public int add() {return adder.add(10, 15);}
}
2. org.calculation包
创建Adder.java
类
package org.calculation;public class Adder {public int add(int a, int b) {return a + b;}
}
3. 打包
- 将
org.calculation
包打包为adder.jar
包 - 将
io.test
包打包为mymain.jar
包,并设置为可通过java -jar mymain.jar
运行的文件
4. 执行
调用以下命令即可将adder.jar
包动态加载进系统的classpath中,并调用该包中的类
java -jar mymain.jar