从JVM上的一个jar运行多个Scala应用

问题描述 投票:0回答:1

我有一个Scala应用程序,可通过命令java -jar myapp.jar使用uber jar在JVM上成功运行。我需要创建一个单独的但相关的Scala作业,该作业使用与第一个相同的对象/函数/依赖项,这使其成为保存在相同代码存储库和uber jar中的不错的选择。请注意,这些Scala作业不使用Spark,因此spark2-submit不可行。

问题:如何在JVM上的同一uber jar中运行2个单独的Scala作业? (我正在使用Scala 2.11.8和SBT进行jar组装)

其他上下文:

[我已经研究了有关StackOverflow的讨论,即有关使用this postjava -cp myapp.jar MyClass指定Java类的this post,它们仅提出了使用scala -classpath myapp.jar MyClass运行Scala等效项的解决方案。

虽然scala -classpath解决方案可能适用于第二个链接讨论的OP,但我将代码部署到没有scalasbt可执行文件的环境中,而该环境仅具有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!")
  }
}

有没有一种方法可以使用java -cp myapp.jar MyClass运行Scala代码?我已经尝试过此操作并收到以下错误:

Error: Could not find or load main class MyClass

我能想到的主要替代方法是创建一个Scala对象,该对象充当主入口点,并使用一个参数来确定要运行的作业。如果可能的话,我想避免该解决方案,但是它将允许我继续使用java -jar myapp.jar,它一直运行良好。]

我有一个Scala应用程序,该应用程序通过以下命令使用uber jar在JVM上成功运行:java -jar myapp.jar。我需要创建一个单独的但相关的Scala作业,该作业使用许多相同的...

scala jar jvm uberjar
1个回答
0
投票

您需要为App实例使用标准名称:

© www.soinside.com 2019 - 2024. All rights reserved.