我有一个模块客户端 - 服务器项目,每个项目都有一个main。
我尝试使用sbt-native-packager
为两者生成启动脚本。
项目/ P.scala
object Tactic extends Build {
lazy val root =
(project in file(".")).
configs(Client, Server)
.settings( inConfig(Client)(Defaults.configTasks) : _*)
.settings( inConfig(Server)(Defaults.configTasks) : _*)
lazy val Client = config("client") extend Compile
lazy val Server = config("server") extend Compile
}
build.sbt
mainClass in Client := Some("myProject.Client")
mainClass in Server := Some("myProject.Server")
enablePlugins(JavaAppPackaging)
当我运行client:stage
时,会创建包含所有必需jar的目录target/universal/stage/lib
,但缺少bin
目录。我做错了什么?
辅助问题:设置起始脚本名称的关键是什么?
答案 0 :(得分:2)
我建议您将项目设置为多模块构建,而不是创建和使用新配置。我尝试了你的多重配置路线,很快就变得毛茸茸。
例如(我为shared
& client
之间共享的任何内容创建了server
项目:
def commonSettings(module: String) = Seq[Setting[_]](
organization := "org.tactic",
name := s"tactic-$module",
version := "1.0-SNAPSHOT",
scalaVersion := "2.11.6"
)
lazy val root = (project in file(".")
settings(commonSettings("root"))
dependsOn (shared, client, server)
aggregate (shared, client, server)
)
val shared = (project
settings(commonSettings("shared"))
)
val client = (project
settings(commonSettings("client"))
enablePlugins JavaAppPackaging
dependsOn shared
)
val server = (project
settings(commonSettings("server"))
enablePlugins JavaAppPackaging
dependsOn shared
)
注意我在sbt-native-packager
和JavaAppPackaging
中启用了client
的{{1}}。
然后运行server
。
此外,起始脚本名称的键是stage
。