scala - 在 JVM 上从一个 jar 运行多个 Scala 应用程序

标签 scala jar jvm uberjar

我有一个 Scala 应用程序,它通过以下命令使用 uber jar 在 JVM 上成功运行:java -jar myapp.jar。我需要创建一个单独但相关的 Scala 作业,该作业使用许多与第一个作业相同的对象/函数/依赖项,使其成为保留在同一代码存储库和 uber jar 中的绝佳候选者。请注意,这些 Scala 作业不使用 Spark,因此 spark2-submit 不在考虑范围内。

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

其他上下文:

我已经研究过相关的 StackOverflow 讨论,即 this post关于使用 java -cp myapp.jar MyClassthis post 指定 Java 类,其中仅介绍了使用 scala -classpath myapp.jar MyClass 运行 Scala 等效项的解决方案。

虽然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!")
  }
}

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

Error: Could not find or load main class MyClass

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

最佳答案

您需要为 App 实例使用完全限定名称:

java -cp myapp.jar mypackage.MyClass

关于scala - 在 JVM 上从一个 jar 运行多个 Scala 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307565/

相关文章:

java - 如何将 VM 选项添加到 jar 文件?

JavaCompiler 无法在 Jar 中运行

java - JVM 被 MappedByteBuffer 杀死

java - JVM堆空间分配困惑

scala - 如何为所有数字类型创建通用类?

angularjs - 在 Angular + Scala Play 上启用 CORS

scala - 如何将 Map[A,Future[B]] 转换为 Future[Map[A,B]]?

scala - 在 PartialFunction 的 isDefined 和 Apply 中都发生了代价高昂的计算

从 AIX 运行时出现 java.lang.NoClassDefFoundError : javax. mail.Address 错误

java - 64 位升级后关闭 Tomcat JVM 服务的时间更长