所以使用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作为参数并将其传递给启动脚本......
答案 0 :(得分:4)
您可以使用一个主类作为默认类并传递
@city_options = City.where(province_id: @address.province_id).collect{ |x| [x.name, encrypted_id(x.id)] }
参数以bash脚本运行另一个主类。