我试图使用sbt来拉下一个现有的github项目,然后(显然)在我的代码中使用它。我的简略的 build.sbt
是如下图所示。
lazy val myProjInGit = RootProject(
uri("git://github.com/me/sheet-ref.git#master"))
lazy val root = (project in file("."))
.dependsOn(myProjInGit)
.settings(
name := "MainProj",
)
libraryDependencies ++= Seq( /*other stuff... */)
这可能是一个基本的,但我应该如何将其导入到代码中?我能不能用,比如说。import myProjInGit.SampleObject.sampleFunction
在我 Main.scala
? 我可以看到一个令人不安的缺乏信息的SO关于这个主题,所以我不确定我没有完全错误的树。先谢谢你的帮助。
EDIT: 这里有一些进一步的细节。我试图导入的项目只是一个库,所以它只包含一个 package object
. 为了尝试调试一下,我试着把它导入到一个叫做 ProjectRef
而不是 RootProject
. 我发现 projects
sbt命令,如果我在我试图导入的项目上运行它(不是主项目),它给我的是。
sbt:SheetRef> projects
[info] In file:/data/va-projects/sheet-ref/
[info] * SheetRef
所以... 似乎外部项目叫做SheetRef. 如果我试着导入SheetRef,使用
lazy val sheetRef = ProjectRef(
uri("git://github.com/me/sheet-ref.git#master"), "SheetRef")
然后,我得到一个SBT错误。
[error] No project 'SheetRef' in 'git://github.com/me/sheet-r
ef.git#master'.
[error] Valid project IDs: root
这感觉很不直观。我可以以root的身份导入它,但是我似乎无法从我的代码中访问它--如果它需要一个导入语句,我不清楚它应该是什么。
依赖关系必须是一个SBT项目,所以SBT知道如何构建它。如果是的话,那么是的,你可以像访问代码中的其他依赖一样访问它,因为它像其他依赖一样被添加到classpath中(在构建之后)。
这感觉很不直观。我可以以root的身份导入它,但是我似乎无法从我的代码中访问它--如果它需要一个导入语句,我不知道它应该是什么。
问题是,你怎么添加依赖关系并不重要,它可以是一个普通的库依赖,一个非管理的依赖,一个源依赖等等。这些都是SBT的概念,对Scala编译器没有任何意义。
所以 import
语句不能依赖于项目名称、jar名称或类似的东西。其实,这和你把这些文件放到自己的项目里是一样的。
有没有人把这样的事情做成了?我也在尝试同样的方法,不知怎的,我成功导入了git项目,但我不知道如何访问导入的scala组件。