【发布时间】: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