如何在具有多个电源的单个模块项目中设置 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】:

我建议将您的项目设置为多模块构建,而不是创建和使用新配置。我尝试了您的多种配置路线,它很快就变得毛茸茸。

例如(我为clientserver 之间共享的任何内容创建了一个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
)

请注意,我在 clientserver 中启用了 sbt-native-packagerJavaAppPackaging

然后运行stage


另外,起始脚本名称的键是executableScriptName

【讨论】:

太棒了!我真的是一个 sbt 初学者,所以我的解决方案很天真,可能不协调。谢谢

以上是关于如何在具有多个电源的单个模块项目中设置 sbt-native-packager的主要内容,如果未能解决你的问题,请参考以下文章

如何在熊猫中设置具有多个日期的多索引?

在 TextInput 小部件中设置单个单词的样式

如何使用 webpack 在项目中设置多个文件输入和输出?

单个目录指向多个git存储库

MYSQL,使用单个选择语句在存储过程中设置两个变量

如何在单个 AWS EC2 实例上托管多个域和子域