2013-04-10 62 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

相关问题