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

How to import unmanaged dependencies into code

我正在尝试使用 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。我发现了 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 知道如何构建它。如果是,那么是的,您可以像访问代码中的任何其他依赖项一样访问它,因为它像任何其他依赖项一样被添加到类路径(在构建之后)。

Which feels unintuitive. I can import it as root, but then I seem to be unable to access it from my code - if it requires an import statement, it's not obvious to me what it should be.

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

因此 import 语句不能依赖于项目名称、jar 名称或类似名称。其实就跟直接把那些文件放到自己的项目里一样。

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