如何将未管理的依赖关系导入到代码中?

问题描述 投票:0回答:1

我试图使用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的身份导入它,但是我似乎无法从我的代码中访问它--如果它需要一个导入语句,我不清楚它应该是什么。

scala sbt
1个回答
2
投票

依赖关系必须是一个SBT项目,所以SBT知道如何构建它。如果是的话,那么是的,你可以像访问代码中的其他依赖一样访问它,因为它像其他依赖一样被添加到classpath中(在构建之后)。

这感觉很不直观。我可以以root的身份导入它,但是我似乎无法从我的代码中访问它--如果它需要一个导入语句,我不知道它应该是什么。

问题是,你怎么添加依赖关系并不重要,它可以是一个普通的库依赖,一个非管理的依赖,一个源依赖等等。这些都是SBT的概念,对Scala编译器没有任何意义。

所以 import 语句不能依赖于项目名称、jar名称或类似的东西。其实,这和你把这些文件放到自己的项目里是一样的。


0
投票

有没有人把这样的事情做成了?我也在尝试同样的方法,不知怎的,我成功导入了git项目,但我不知道如何访问导入的scala组件。

© www.soinside.com 2019 - 2024. All rights reserved.