Scala SBT - sbt-native-packager,如何指定自定义阶段目录 [英] Scala SBT - sbt-native-packager, how to specify custom stage directory
问题描述
如何为多项目配置指定自定义暂存目录?我正在使用 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屋!