Трудно сказать точную природу проблемы, поскольку вы не включили исключение или трассировку стека. Я не уверен, почему вы загружаете инструменты avro динамически, а не включаете jar статически как часть вашей сборки.
// public int run( InputStream stdin, PrintStream out, PrintStream err, List<String> args)
val method = clazzDFRT.getMethod("run", Class[_] : _*)
Вы не указали параметры правильно.
method.invoke(objDFRT.asInstanceOf [Object], toolClassArgsAsJava)
val params: Array[Class[_]] = Array(classOf[InputStream], classOf[PrintStream], classOf[PrintStream], classOf[java.util.List[_]])
val method = clazzDFRT.getMethod("run", params : _*)
или
val method = clazzDFRT.getMethod("run", classOf[InputStream], classOf[PrintStream], classOf[PrintStream], classOf[java.util.List[_]])
Чтобы исправить вызов, вы не можете передать параметры в списке. Метод invoke принимает переменные аргументы, вам нужно передать их напрямую.
method.invoke(objDFRT.asInstanceOf[Object], stdin, stdout, stderr, toolCmdArgsAsJava)
или
method.invoke(objDFRT.asInstanceOf[Object], Array(stdin, stdout, stderr, toolCmdArgsAsJava): _*)
Обратите внимание, что во втором варианте используется Array
, а не List
.
Предлагаю вам ознакомиться с документацией по использованию аргументов var в Java и Scala * https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html * http://daily -scala.blogspot.com / 2009/11 / varargs.html