2013-04-10 91 views
3

這似乎不起作用。我想要的主要原因是在多個多項目中共享通用設置,如「publishTo」或「credentials」。我可以在另一個多項目中使用多項目嗎?

有一個項目結構這樣

root 
    |--L1 
     |--L2 

我想在L1定義設置和L2使用它們,以及在根定義設置,並在L1和L2使用它們。

+0

答案是肯定的,但我只知道這是可能的。我的同事建立了一個統一一些以前不同但相互關聯的項目。我會盡力讓他回答。 – 2013-04-10 14:49:33

回答

0

通常情況下,你可以在任何子項目構建級別共享設置,通過在build.sbt文件在項目的根目錄指定in ThisBuild,如http://www.scala-sbt.org/release/docs/Getting-Started/Multi-Project.html#sharing-settings

提及,但只適用於共享中所有的值項目。

在你的情況,如果你定義了你的項目,在Build.scala

import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val root = Project(id = "root", 
          base = file(".")) 

    lazy val L1 = Project(id = "L1", 
          base = file("L1")) 

    lazy val L2 = Project(id = "L2", 
          base = file("L1/L2")) 
} 

以下。如果你想重用一個鍵(如publishTo)已在L1L2定義,你會寫以下線L2build.sbt

publishTo <<= publishTo in L1 

可以在SBT使用inspect命令退房鍵值以及它們是如何設置。

> projects 
[info] In file:/Users/leo/src/project0/ 
[info]  L1 
[info]  L2 
[info] * root 
> project L2 
[info] Set current project to L2 (in build file:/Users/leo/src/project0/) 
> inspect publish-to 
[info] Setting: scala.Option[sbt.Resolver] = Some(Repo1: https://repo1.org) 
[info] Description: 
[info] The resolver to publish to. 
[info] Provided by: 
[info] {file:/Users/leo/src/project0/}L2/*:publish-to 
[info] Defined at: 
[info] /Users/leo/src/project0/L1/L2/build.sbt:1 
[info] Dependencies: 
[info] L1/*:publish-to 
[info] Reverse dependencies: 
[info] L2/*:publish-configuration 
[info] L2/*:other-resolvers 
[info] Delegates: 
[info] L2/*:publish-to 
[info] {.}/*:publish-to 
[info] */*:publish-to 
[info] Related: 
[info] L1/*:publish-to 
[info] */*:publish-to 
[info] {.}/*:publish-to 
> 
+0

似乎只能從根項目共享設置。如果我有三級項目,所有子項目都可以共享根級別的設置。 – wwagner4 2013-04-22 06:29:16

+0

作爲一個結論,我會說SBT並不真正支持多個層次的層次結構。即使將模塊放在其他模塊的子目錄中,也並不意味着這些模塊之間有任何連接。 – wwagner4 2013-04-23 20:04:22

相關問題