Scala SBT - sbt-native-packager,如何指定自定义阶段目录 [英] Scala SBT - sbt-native-packager, how to specify custom stage directory

查看:43
本文介绍了Scala SBT - sbt-native-packager,如何指定自定义阶段目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何为多项目配置指定自定义暂存目录?我正在使用 sbt-native-packager

How can I specify custom staging directory for multi-project configuration? I'm using sbt-native-packager

以下是我的多模块配置草图.当我暂存这个项目(sbt stage)时,文件被写入

Below is the sketch of my multi module configuration. When I stage this project (sbt stage) the files are written to

common/target/universal/stage
app1/target/universal/stage
app2/target/universal/stage

我想像这样传递环境变量 stageSuffix:sbt stage -DstageSuffix=XYZ.此变量应使其将项目暂存到以下目录:

I wan to pass an env variable stageSuffix like this: sbt stage -DstageSuffix=XYZ. This variable should make it stage the project to the following directories:

common/target/universal/stage-XYZ
app1/target/universal/stage-XYZ
app2/target/universal/stage-XYZ

我已尝试修改 commonSettings 中的 stagingDirectory,但效果不佳,我收到诸如对未定义设置的引用"之类的错误.

I've tried modifying stagingDirectory in commonSettings, but it doesn't quite work, I'm getting errors like "References to undefined settings".

我怎样才能做到这一点?

How can I make this work?

val stageSuffix = sys.props.getOrElse("stageSuffix", ".")

val commonSettings = Seq(
  stagingDirectory := stagingDirectory.value / stageSuffix, // this makes it fail
  libraryDependencies ++= Seq(...))

val common = project.in(file("common"))
  .enablePlugins(JavaAppPackaging)
  .settings(commonSettings: _*)

val app1 = project.in(file("app1"))
  .enablePlugins(JavaAppPackaging)
  .settings(mainClass in Compile := Some("app1.Main"))
  .dependsOn(common)
  .settings(commonSettings: _*)
  .settings(libraryDependencies ++= Seq(...))

val app2 = project.in(file("app2"))
  .enablePlugins(JavaAppPackaging)
  .settings(mainClass in Compile := Some("app2.Main"))
  .dependsOn(common)
  .settings(commonSettings: _*)
  .settings(libraryDependencies ++= Seq(...))

val main = project.in(file("."))
  .dependsOn(common, app1, app2)
  .aggregate(common, app1, app2)
  .settings(commonSettings: _*)

推荐答案

我设法让它像这样工作:

I managed to get it working like this:

val stagingDirectoryOverrideOpt = sys.props.get("stageSuffix").map { stageSuffix =>
  stagingDirectory in Universal := {
    val stageFile = (stagingDirectory in Universal).value
    new File(stageFile.getParentFile, s"stage-$stageSuffix")
  }
}

val app1 = project.in(file("app1"))
  .enablePlugins(JavaAppPackaging)
  .settings(mainClass in Compile := Some("app1.Main"))
  .dependsOn(common)
  .settings(commonSettings: _*)
  .settings(stagingDirectoryOverrideOpt.toSeq: _*)
  .settings(libraryDependencies ++= Seq(...))

希望有办法让它更漂亮

这篇关于Scala SBT - sbt-native-packager,如何指定自定义阶段目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆