2016-06-11 80 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(...)) 

希望有辦法讓它更漂亮