2016-06-11 67 views
2

如何为多项目配置指定自定义staging目录?我正在使用sbt-native-packagerScala SBT - sbt-native-packager,如何指定自定义舞台目录

下面是我的多模块配置的草图。当I期项目(sbt stage)的文件被写入

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

我婉传递一个环境变量stageSuffix这样的:sbt stage -DstageSuffix=XYZ。这个变量应该使它阶段的项目到以下目录:

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

我试过在commonSettings修改stagingDirectory,但它不是做得比较工作,我越来越喜欢“引用未定义设置”的错误。

我该如何做这项工作?

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: _*) 
+0

是“引用未定义设置”设置错误使得参考'stagingDirectory '?知道哪些设置具体存在问题将有所帮助。 – metasim

+0

是的,删除该设置会让构建通过,但是在标准的分段位置:'target/universal/stage' –

回答

1

我设法得到它的工作是这样的:

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(...)) 

希望有办法让它更漂亮