Kotlin / Java 動態載入 JAR
阿新 • • 發佈:2021-11-13
如圖
或者
// 獲取要載入的 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 也是差不多的操作
執行結果