2013-04-24 63 views
2

我正在尝试使用Github托管的git存储库(“项目A”)的sbt的直接dependsOn功能。我正在使用一个稳定的标签引用,并在我的测试项目(“项目B”)中,做了从源项目克隆项目A并开始编译。然而,编译失败,项目A自己的依赖关系似乎缺失(即似乎没有收到项目A的build.sbt中定义的任何东西)。sbt直接git源依赖 - 不提取传递库依赖?

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

我用这个功能在一些项目中并没有遇到过这个问题。建议:确保build.sbt在根目录下;创建一个Build.scala并在那里声明依赖关系。当然,我认为你可以分解项目A并不是什么大不了的事情。 – pedrofurla 2013-04-24 16:55:27

+0

@pedrofurla好的,所以这是个好消息,因为它应该在理论上工作。我在根目录下有'build.sbt',项目A没有单独的'project/Build.scala',所以它肯定是一些小故障,我猜?可以'retrieveManaged:= true'是一个问题(我在每个项目中都使用它,因为这是我可以合理地监督库版本和快照与稳定的东西的唯一方式)? – 2013-04-24 18:36:42

回答

1

这纯粹是我自己的错,不是sbt的。我曾在监督项目A.一个非托管库(文件夹lib)兑换成一个Maven后托管版本(文件夹lib_managed),项目A现在正确地从源代码编译的分期项目B.