【问题标题】:Running multiple applications with sbt使用 sbt 运行多个应用程序
【发布时间】:2023-03-22 21:26:01
【问题描述】:

我的目录结构是这样设置的。

src/main/scala/main/Main.scala
src/main/scala/scripts/MainScript.scala

脚本是一个正在运行的后台作业。

我之前使用sbt-assembly 将主文件打包到要部署的jar 中,但我不确定如何使用sbt-assemblysbt-native-packager 创建两个单独的jar。我该怎么做?解决这个问题的最佳方法是什么?

我想做类似的事情。

java -jar main.jar $PORT
java -jar scriptMain.jar

【问题讨论】:

  • Sbt 原生打包器为您创建可部署的工件。您可以串联使用 Sbt 程序集和 Sbt 本机打包程序。我们为 spark 创建 rpm 包,使用 Sbt 程序集创建的 fat jar。
  • @Manas 是否可以在build.sbt 中使用sbt-assembly 编写解决方案以同时创建两个单独的JAR?我以前用它来创建一个 JAR。因为一旦有了这些,我就可以创建另一个文件来执行上述代码块中发生的事情。
  • @Manas 我应该创建一个多项目构建吗?所以我会在common 中有公共代码,在script 中有MainScript,在main 中有Main。并以这种方式构建 JAR?
  • 不确定多项目构建将如何帮助您。我仍然会使用sbt-assembly 并使用两个脚本。一个打电话给main,另一个打电话给script。基本上,您最终会将相同的 jar 复制到两个包中。

标签: scala sbt-assembly sbt-native-packager


【解决方案1】:

仅使用 native-packager 解决此问题的一种方法如下。

  • 把你所有的主要课程放在src/main/scala
  • 定义一个应该默认运行的mainClass in Compile := Some("foo.bar.Main")
  • add additional scriptssrc/universal/bin 中,您想提供。这些脚本可以将native-packagerand set the-main参数生成的主脚本调用到你要调用的类中。

现在您有一个具有以下结构的输出包(例如 zip、rpm、deb)。假设您的应用名为 myApp 并且您提供给名为 otherApp1 / otherApp2

的其他 bin 脚本
lib/ (jars live here)
conf/ (configuration files here, if any)
bin/
  myApp
  otherApp1
  otherApp2

不幸的是,我没有脚本示例(我的 bash-foo 对于 SO 上的即时魔法还不够好)。最后,脚本(otherApp1、otherApp2)应该只是将它们收到的参数传递给原生打包脚本(myApp)。

an issue #633 提供了一种自动生成此类脚本的方法。

希望有帮助, 渚

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 2018-02-21
    • 2017-01-06
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2021-03-06
    相关资源
    最近更新 更多