如何在sbt中的子模块中继承非托管依赖项?

geo*_*try 5 sbt

我有一个看起来像这样的项目,使用sbt 0.13.2:

base
 - project
   - Build.scala
   - plugins.sbt
 - lib
   - unmanaged jar #1
   - unmanaged jar #2
 - core
    - src
      - .......
 - clp
    - src 
      - .......
 - server
    - src
      - ......
Run Code Online (Sandbox Code Playgroud)

其中core包含公共代码,clp并且server是两个依赖的相关项目core.

我正试图找到合适的mojo,Build.scala以便所有这三个模块都依赖于它base/lib.目前我lib在每个模块中使用符号链接dir 作弊,但我想在没有符号链接的情况下自动完成.

这是一个Build.scala文件示例- 我应该如何修改它以使依赖项工作?

import sbt._
import Keys._

object RootBuild extends Build {
  lazy val buildSettings = Defaults.defaultSettings ++ Seq(
    scalaVersion := "2.11.1",
    unmanagedBase := baseDirectory.value / "lib"
  )

  lazy val standardSettings = buildSettings ++ Seq(
    libraryDependencies ++= Seq(
      "org.scalatest" % "scalatest_2.11" % "2.1.6" % "test",
      "org.testng" % "testng" % "6.8.8"
    )
  )

  lazy val Projects = Seq(root, core, clp)

  lazy val root = Project("root", file("."), settings=standardSettings) aggregate(core, clp)
  lazy val core = Project("core", file("core"), settings=standardSettings)
  lazy val clp = Project("clp", file("clp"), settings=standardSettings) dependsOn core
  lazy val server = Project("server", file("server"), settings=standardSettings) depensOn core
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*ski 4

这是正确的build.sbt

lazy val a, b = project settings(
  Defaults.defaultSettings ++ Seq(
    unmanagedBase := (unmanagedBase in ThisProject).value
  ): _*
)
Run Code Online (Sandbox Code Playgroud)

这个想法是unmanagedBase根据根项目中的设置值(隐式定义的)来设置子模块。

在你的具体情况下,它会如下所示:

import sbt._
import Keys._

object RootBuild extends Build {
  lazy val buildSettings = Defaults.defaultSettings ++ Seq(
    scalaVersion := "2.11.1"
  )

  lazy val standardSettings = buildSettings ++ Seq(
    libraryDependencies ++= Seq(
      "org.scalatest" % "scalatest_2.11" % "2.1.6" % "test",
      "org.testng" % "testng" % "6.8.8"
    )
  )

  lazy val submoduleSettings = standardSettings ++ Seq(
    unmanagedBase := (unmanagedBase in ThisProject).value    
  )

  lazy val root = project in file(".") settings(standardSettings: _*) aggregate(core, clp)
  lazy val core = project settings(submoduleSettings: _*)
  lazy val clp = project settings(submoduleSettings: _*) dependsOn core
  lazy val server = project settings(submoduleSettings: _*) dependsOn core
}
Run Code Online (Sandbox Code Playgroud)