sbt多个本机包

时间:2015-05-18 23:30:22

标签: playframework sbt sbt-native-packager

所以使用Scala Play Framework。我有一个代码库但需要以两种方式启动它。一种方法将以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作为参数并将其传递给启动脚本......

1 个答案:

答案 0 :(得分:4)

您可以使用一个主类作为默认类并传递 @city_options = City.where(province_id: @address.province_id).collect{ |x| [x.name, encrypted_id(x.id)] } 参数以bash脚本运行另一个主类。