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

How to call a scala function with parameters using java classloader?

我正在寻找将 scala jar 加载到 java classloader 的指导。 当我使用 java jar 文件时,下面的函数对我有用。

其中,arr 是一个 java.net.URL 数组,用于我需要加载到 classloader 中的所有 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( class名称) 在这一行。

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

我想调用 class 测试的打印方法。有人可以指导吗?我检查了 SO 中的其他几个帖子,但它们正在处理可能不适用于我的用例的对象和特征。

Scala class 例如:

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 中,我必须专门创建一个 class 的对象并将该对象传递给 method.invoke。对我来说是一个新的学习。