【问题标题】:sbt multiple native packagessbt 多个原生包
【发布时间】:2015-07-30 14:51:08
【问题描述】:

所以使用 Scala Play 框架。我有一个代码库,但需要以两种方式启动它。一种方法是以 Play Netty 作为主类启动,并运行一个网络服务器。第二种方法将运行我自己的主类并做不同的事情。

如果我玩 dist (https://www.playframework.com/documentation/2.3.x/ProductionDist)

它最终使用了 sbt-native 插件,并制作了一个新的 zip。在该 zip 中是一个脚本,它使用 Netty 的主类调用 java。这最终来自

  mainClass in (Compile, run) := Some("play.core.server.NettyServer"),

PlaySettings.scala 内部。

我想保留所有这些,但是向 dist.. 添加第二个工件,它具有不同主类的唯一不同。

我开始尝试制作子项目.. 但不确定这是我真正想要的。比如:

lazy val root = Project(
  id = "root",
  base = file("."),
  librar
  aggregate = Seq(web, backend)

).dependsOn(web, worker)

lazy val web = Project(
  id = "web",
  base = file("."),
  settings = packageArchetype.java_server ++ Seq(
    name := "web",
    mainClass in Compile := Some("play.core.server.NettyServer")
  )
).enablePlugins(PlayScala)

lazy val backend= Project(
  id = "backend",
  base = file("."),
  settings = packageArchetype.java_server ++ Seq(
    name := "backend",
    mainClass in Compile := Some("com.foobar.BackendMain")
  )
)

但我最终还是只有一个神器。还有哪些其他选择?

我可以破解 bash-template 并将 mainClass 添加为参数并将其传递给启动脚本...

【问题讨论】:

    标签: playframework sbt sbt-native-packager


    【解决方案1】:

    您可以使用一个主类作为默认类并通过 -main you.another.class.Name bash 脚本的参数以运行另一个主类。

    【讨论】:

    • 我认为这适用于真正的 sbt-native-packager。但据我所知,播放开始脚本正在剥离 -main 参数。在我的游戏生成的启动脚本中,我有declare -r app_mainclass="play.core.server.NettyServer" 。因此,一种选择是尝试找出它在游戏中的生成位置,并将主类作为参数,就像 sbt-native 通常那样..
    • 这不在我的 run 函数中,由 play 2.3.9 via play dist .. 但我没有看到他们是如何把它拿出来的,因此看不到我如何将它恢复到正常状态play-native-package 风格..你发布的内容非常理想。
    • 查看bash-template 237 到 255 行。
    • 这是播放生成的文件的样子: ``` # check java version if [[ ! $no_version_check ]]; then java_version_check fi # 现在我们检查是否有任何 java opts 在环境中。这些首先列出,脚本能够覆盖它们。如果 [[ "$JAVA_OPTS" != "" ]];然后 java_opts="${JAVA_OPTS}" fi ```
    猜你喜欢
    • 2013-08-07
    • 2018-10-19
    • 2018-10-25
    • 2020-12-23
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多