如何将非托管依赖项导入代码
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 组件。
我正在尝试使用 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。如果我尝试使用
导入 SheetReflazy 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 组件。