我正在尝试使用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"
上重新声明库依赖项?我希望不会!
答案 0 :(得分:2)
这纯粹是我自己的错,不是sbt's。我在项目A中监督了一个非托管库(文件夹lib
)。在将其交换为Maven托管版本(文件夹lib_managed
)后,项目A现在可以从源代码中正确编译项目B的分期。