sbt直接git源依赖 - 不提取传递库依赖?

时间:2013-04-24 16:34:09

标签: scala sbt

我正在尝试使用github托管的git存储库(“项目A”)进行sbt的直接dependsOn功能。我正在使用稳定的标记引用,在我的测试项目(“项目B”)中,sbt 从源代码克隆项目A并开始编译。然而,编译失败,项目A自己的依赖项似乎缺失(即它似乎没有拾取项目A的build.sbt中定义的任何内容)。

这与maven / ivy管理的依赖项不同吗?我是否需要在子项目B中包含所有传递依赖项?听起来有点奇怪。这样可以扼杀整个工作,因为我有十几个项目A所依赖的库。


举例说明:

项目A (在Github上作为来源在线):

// build.sbt:
version := "1.2.3"

libraryDependencies += "org.foo" %% "bar" % "1.0"

项目B (本地):

// project/Build.scala
import sbt._
import Keys._

object Build extends sbt.Build {
  lazy val projA = RootProject(uri("git://github.com/me/projA.git#v1.2.3"))

  lazy val projB = Project(id = "project-B", base = file(".").dependsOn(projA)
}

这就是:

[info] Compiling 678 Scala sources to /Users/me/.sbt/staging/
  5666eafa865fdf605be3/target/scala-2.10/classes...
[error] /Users/me/.sbt/staging/5666eafa865fdf605be3/src/main/scala/com/me/
  BarKeeper.scala:3: not found: object bar
[error] import org.foo.bar
[error]        ^

那么我是否必须在"org.foo" %% "bar" % "1.0"上重新声明库依赖项?我希望不会!

1 个答案:

答案 0 :(得分:2)

这纯粹是我自己的错,不是sbt's。我在项目A中监督了一个非托管库(文件夹lib)。在将其交换为Maven托管版本(文件夹lib_managed)后,项目A现在可以从源代码中正确编译项目B的分期。