1. 程式人生 > 其它 >Kotlin / Java 動態載入 JAR

Kotlin / Java 動態載入 JAR

如圖

或者

// 獲取要載入的 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 也是差不多的操作

執行結果