【问题标题】:How to inherit unmanaged dependencies in submodules in sbt?如何在 sbt 的子模块中继承非托管依赖项?
【发布时间】:2014-05-28 18:38:06
【问题描述】:

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

base
 - project
   - Build.scala
   - plugins.sbt
 - lib
   - unmanaged jar #1
   - unmanaged jar #2
 - core
    - src
      - .......
 - clp
    - src 
      - .......
 - server
    - src
      - ......

其中core 包含公共代码,clpserver 是两个相关项目,它们都依赖于core

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

这是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
}

【问题讨论】:

    标签: sbt


    【解决方案1】:

    这是一个正确的build.sbt

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

    想法是根据根项目中设置的值(隐式定义)为子模块设置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
    }
    

    【讨论】:

    • 应该是unmanagedBase := (unmanagedBase in LocalRootProject).value
    • @James 你用的是什么版本的 sbt?我还没有检查过最新版本。
    • 我的 sbt 版本是 0.13。
    • @James 哦哦。您当然应该尽早升级(现在是 sbt 1.3.4 时间)。
    猜你喜欢
    • 2019-05-20
    • 2016-12-18
    • 2015-06-23
    • 2015-05-24
    • 2014-05-01
    • 2019-09-21
    • 1970-01-01
    • 2015-02-22
    • 2019-07-25
    相关资源
    最近更新 更多