如何使用java类加载器调用带参数的scala函数



我正在寻找一些将scala-jar加载到java类加载器中的指导。当我使用java jar文件时,下面的函数对我有效。

其中,arr是java.net.URL的数组,用于我需要加载到类加载器中的所有jar。

val classLoader = new URLClassLoader(arr, this.getClass().getClassLoader())
val clazz = classLoader.loadClass(className)
val myMethod = clazz.getDeclaredMethod(methodName, classOf[String])
myMethod.setAccessible(true)
val response = myMethod.invoke(methodName)

然而,当我试图使用类似的方法从scala-jar文件中调用scala函数时,我在val clazz=classLoader.loadClass(className(处得到classNotFound异常。

val clazz = classLoader.loadClass("com.testing.Test")

我想调用类Test的print方法。有人能给我引路吗?我查看了SO中的其他几个帖子,但它们处理的对象和特性可能不适用于我的用例。

Scala类,例如:

package com.testing
class Test(){
def print (a: String, b: String): String = {
return a+b
}
}

谢谢!

这应该和Java类一样,因为类加载器不应该关心什么区别,我已经做了很多次了。但一个可能的问题是,如果不在arr中包含依赖项;Java和Scala都是如此,但Scala可能缺少scala-library-<version>.jar

为寻找类似问题的人发布答案。Classloader对scala和java都能正常工作。

对于Java,只需在method.invoke中传递方法名称对我来说很有效,而在scala中,我必须专门创建一个类的对象,并将该对象传递给method.invoke.这对我来说是一种新的学习。

最新更新