在Java中,我通过这种方式加载外部类(在.jar文件中):
ClassLoader classLoader = new URLClassLoader(new URL[] {
new File("module.jar").toURI().toURL()});
Class clazz = classLoader.loadClass("my.class.name");
Object instance = clazz.newInstance();
//check and cast to an interface, then use it
if (instance instanceof MyInterface)
...
Run Code Online (Sandbox Code Playgroud)
它工作正常.
====================
现在我想在Scala中做同样的事情.我有一个trait名字Module(Module.scala):
trait Module {
def name: String
}
object Module {
lazy val ModuleClassName = "my.module.ExModule"
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个扩展模块Module,然后将其编译为module.jar:
package my.module
import Module
object ExModule extends Module {}
Run Code Online (Sandbox Code Playgroud)
然后我用这段代码加载它:
var classLoader = new URLClassLoader(Array[URL](
new File("module.jar").toURI.toURL))
var …Run Code Online (Sandbox Code Playgroud)