如图
或者
// 获取要加载的 jar 文件 val jarResource = javaClass.classLoader.getResource("MXShell.jar")!! // 构造一个 URLClassLoader, 第一个参数是要添加进 classPath 的 文件集合 val classLoader = URLClassLoader(arrayOf(jarResource)) // 读取 jar 文件 val jarInputStream = JarInputStream(jarResource.toFile().inputStream()) // 取得 META-INF/MANIFEST.MF 中的 Main-Class 的值 ( 该 jar 的启动类 ) val mainClass = jarInputStream.manifest.mainAttributes.getValue("Main-Class") // 使用刚刚构造的 ClassLoader 加载 jar 里的 mainClass val jarMainClazz = classLoader.loadClass(mainClass) // 生成 mainClass 对象的实例 val jarMainInstance = jarMainClazz.getDeclaredConstructor().apply { isAccessible = true }.newInstance() // 反射执行其中的 main(String[] args) 方法 jarMainClazz.getDeclaredMethod("main", arrayOf<String>()::class.java).invoke(jarMainInstance, arrayOf<String>())
Java 也是差不多的操作
运行结果