如何在具有多个电源的单个模块项目中设置 sbt-native-packager
Posted
技术标签:
【中文标题】如何在具有多个电源的单个模块项目中设置 sbt-native-packager【英文标题】:How to setup sbt-native-packager in a single module project with multiple mains 【发布时间】:2015-06-26 01:43:11 【问题描述】:我有一个单模块客户端-服务器项目,每个模块都有一个主项目。
我正在尝试使用 sbt-native-packager
为两者生成启动脚本。
project/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
目录。我做错了什么?
补充问题:设置起始脚本名的关键是什么?
【问题讨论】:
【参考方案1】:我建议将您的项目设置为多模块构建,而不是创建和使用新配置。我尝试了您的多种配置路线,它很快就变得毛茸茸。
例如(我为client
和server
之间共享的任何内容创建了一个shared
项目):
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
)
请注意,我在 client
和 server
中启用了 sbt-native-packager
的 JavaAppPackaging
。
然后运行stage
。
另外,起始脚本名称的键是executableScriptName
。
【讨论】:
太棒了!我真的是一个 sbt 初学者,所以我的解决方案很天真,可能不协调。谢谢以上是关于如何在具有多个电源的单个模块项目中设置 sbt-native-packager的主要内容,如果未能解决你的问题,请参考以下文章