我有一个 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 MyClass
和 this 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/