如何将非托管依赖项导入代码

  • 本文关键字:依赖 导入 代码 scala sbt
  • 更新时间 :
  • 英文 :


我正在尝试使用 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... */)

这可能是一个基本的,但是我应该如何将其导入代码?我可以在Main.scala中使用import myProjInGit.SampleObject.sampleFunction吗?我可以看到关于这个主题的 SO 信息令人不安地缺乏,所以我不确定我是否完全吠错了树。提前感谢任何帮助。

编辑:这里有一些进一步的细节。我尝试导入的项目只是一个库,因此它只包含一个package object。为了尝试稍微调试一下,我正在尝试将其作为ProjectRef导入,而不是RootProject。我发现了projectssbt 命令,如果我在我尝试导入的项目(不是主项目(上运行它,它会给我:

sbt:SheetRef> projects
[info] In file:/data/va-projects/sheet-ref/
[info]   * 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 知道如何构建它。如果是,那么是的,您可以像访问代码中的任何其他依赖项一样访问它,因为它像任何其他依赖项一样添加到类路径中(在构建后(。

这感觉不直观。我可以将其作为 root 导入,但是我似乎无法从我的代码中访问它 - 如果它需要导入语句,对我来说它应该是什么并不明显。

问题是,如何添加依赖项并不重要;它可以是普通的库依赖项,非托管依赖项,源依赖项等。这些是SBT概念,对Scala编译器没有任何意义。

因此,import语句不能依赖于项目名称、jar 名称或类似的东西。实际上,这就像您只是将这些文件放入自己的项目中一样。

有人让这样的事情起作用吗?我正在尝试相同的方法,并以某种方式设法导入 git 项目,但我不知道如何访问导入的 scala 组件。

最新更新