Запуск нескольких приложений Scala из одной банки в JVM - PullRequest
2 голосов
/ 09 октября 2019

У меня есть приложение Scala, которое успешно работает на JVM с помощью uber jar с помощью команды: java -jar myapp.jar. Мне нужно создать отдельное, но связанное с этим задание Scala, которое использует многие из тех же объектов / функций / зависимостей, что и первое, что делает его отличным кандидатом для хранения в одном и том же хранилище кода и uber jar. Обратите внимание, что в этих заданиях Scala не используется Spark, поэтому spark2-submit выходит за рамки уравнения.

Вопрос: Как запустить 2 отдельных задания Scala из одного и того же uber-баночка наJVM? (Я использую Scala 2.11.8 и SBT для сборки jar)

Дополнительный контекст:

Я уже изучал связанные обсуждения StackOverflow, а именно thisпост об указании классов Java с использованием java -cp myapp.jar MyClass и этот пост , в котором представлено только решение запуска эквивалента Scala с использованием scala -classpath myapp.jar MyClass.

Хотя решение scala -classpath можетработал для OP второго связанного обсуждения, я буду развертывать мой код в среде, в которой нет исполняемых файлов для scala или sbt, только java.

Скажем такя хочу выполнить 2 задания Scala:

// MyClass.scala
package mypackage

object MyClass {
  def main(args: Array[String]): Unit = {
    println("Hello, World!")
  }
}
// MyClass2.scala
package mypackage

object MyClass2 {
  def main(args: Array[String]): Unit = {
    println("Hello, World! This is the second job!")
  }
}

Есть ли способ запустить код Scala, используя java -cp myapp.jar MyClass? Я попробовал это и получил следующую ошибку:

Error: Could not find or load main class MyClass

Основной альтернативой, которую я могу придумать, было бы создание объекта Scala, который служит главной точкой входа и принимает параметр, чтобы определить, какую работу получаетзапустить. Я хотел бы избежать этого решения, если это возможно, но оно позволило бы мне продолжать использовать java -jar myapp.jar, который работал нормально.

...