使用 one-jar 或 sbt-assembly 之类的东西,从 fat jar 动态加载类的正确方法是什么?单罐示例:
val loader = new URLClassLoader(Array(new File(jarName).toURI.toURL), this.getClass().getClassLoader())
var classToLoad = Class.forName (pluginName, true, loader)
var method = classToLoad.getDeclaredMethod (methodName)
var instance = classToLoad.newInstance ()
var result = method.invoke (instance)
Console.println("Result: " + result)
这适用于我的包制作 jar,但如果我通过一个 jar 或程序集创建它,它会出现 java.lang.ClassNotFoundException
异常。我是否需要自定义类加载器(如果需要,它在哪里?)或者类或包名称是否需要特殊语法?
谢谢!
-格雷格
(Scala 中的示例,但对 Java 示例非常满意!)