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

时间:2020-06-10 03:21:02

标签: 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... */)

这可能是基本的,但是我应该如何将其导入代码中?我可以在import myProjInGit.SampleObject.sampleFunction中使用Main.scala吗?我可以看到有关此主题的信息令人不安,因此我不确定自己不是在完全树错了树。预先感谢您的帮助。

编辑:此处有更多详细信息。我尝试导入的项目只是一个库,因此它仅包含一个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导入,但是随后我似乎无法从代码中访问它-如果它需要import语句,对我来说应该是什么并不明显。

2 个答案:

答案 0 :(得分:2)

依赖关系必须是SBT项目,因此SBT知道如何构建它。如果是,那么是的,您就像访问代码中的任何其他依赖项一样访问它,因为它就像其他依赖项一样被添加到类路径中(在构建之后)。

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

问题是,添加依赖关系无关紧要;它可能是普通库依赖关系,非托管依赖关系,源依赖关系等。这些都是SBT概念,对Scala编译器没有意义。

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

答案 1 :(得分:0)

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