运行 来自 JVM 上一个 jar 的多个 Scala 应用程序
Running multiple Scala apps from one jar on JVM
我有一个 Scala 应用程序,它通过以下命令使用 uber jar 在 JVM 上成功 运行s:java -jar myapp.jar
。我需要创建一个单独但相关的 Scala 作业,它使用许多与第一个相同的 objects/functions/dependencies,使其成为保存在相同代码库和 uber jar 中的一个很好的候选者。请注意,这些 Scala 作业不使用 Spark,因此 spark2-submit
不在考虑范围之内。
问题: 我怎样才能 运行 从 JVM 上的同一个 uber jar 中分离出 2 个 Scala 作业? (我正在使用 Scala 2.11.8 和 SBT 进行 jar 组装)
其他上下文:
我已经研究过相关的 Whosebug 讨论,即 this post about specifying Java classes using java -cp myapp.jar MyClass
and this post,它只提出了使用 scala -classpath myapp.jar MyClass
.
的 运行Scala 等价物的解决方案
虽然 scala -classpath
解决方案可能适用于第二个链接讨论的 OP,但我会将我的代码部署到没有 scala
或 [= 可执行文件的环境中20=], 只有 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 应用程序,它通过以下命令使用 uber jar 在 JVM 上成功 运行s:java -jar myapp.jar
。我需要创建一个单独但相关的 Scala 作业,它使用许多与第一个相同的 objects/functions/dependencies,使其成为保存在相同代码库和 uber jar 中的一个很好的候选者。请注意,这些 Scala 作业不使用 Spark,因此 spark2-submit
不在考虑范围之内。
问题: 我怎样才能 运行 从 JVM 上的同一个 uber jar 中分离出 2 个 Scala 作业? (我正在使用 Scala 2.11.8 和 SBT 进行 jar 组装)
其他上下文:
我已经研究过相关的 Whosebug 讨论,即 this post about specifying Java classes using java -cp myapp.jar MyClass
and this post,它只提出了使用 scala -classpath myapp.jar MyClass
.
虽然 scala -classpath
解决方案可能适用于第二个链接讨论的 OP,但我会将我的代码部署到没有 scala
或 [= 可执行文件的环境中20=], 只有 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