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. 打包

  1. org.calculation包打包为adder.jar
  2. io.test包打包为mymain.jar包,并设置为可通过java -jar mymain.jar运行的文件

4. 执行

调用以下命令即可将adder.jar包动态加载进系统的classpath中,并调用该包中的类

java -jar mymain.jar
上一篇:离谱,男顾客难抵 LV 柜姐诱惑,记录曝光


下一篇:Flutter Row组件实战案例