如何让Intellij使用SBT Scala中的依赖项

4
我正在尝试弄清楚当使用SBT时,Idea将如何识别第三方依赖项。当我使用sbt插件gen-idea时,它似乎会下载所有必要的依赖项,并将其放入我的~/.ivy/目录中,就像预期的那样。Intellij如何使用这些依赖关系?
编辑: 我注意到的一件事是,如果我创建一个新的Idea项目而不仅仅是一个模块,那么这个方法可以行得通?有没有想法为什么会这样?我希望能够在同一个项目中拥有多个sbt模块。

你在某个地方尝试过更新命令吗? 我曾经遇到的另一个错误是我设置了sbt配置但没有重新启动控制台。这里只是一些提示。 - Christopher Chiche
2个回答

3

sbt-idea插件可用于多模块sbt项目。我们从sbt-0.10.0开始使用它,目前版本为sbt-0.11.2。如果您已经设置好了构建文件的依赖部分,那么这里是一个完整的Build.scala文件示例,展示了我们如何进行项目设置:

object Vcaf extends Build {
  import Resolvers._
  import Dependencies._
  import BuildSettings._

  lazy val vcafDb = Project(
    id = "vcaf-db",
    base = file("./vcaf-db"),
    dependencies = Seq(),
    settings = buildSettings ++ /* proguard */ SbtOneJar.oneJarSettings ++  Seq(libraryDependencies := dbDeps, resolvers := cseResolvers)
  )

  lazy val vcaf = Project(
    "vcaf",
    file("."),
    dependencies = Seq(vcafDb),
    aggregate = Seq(vcafDb),
    settings = buildSettings ++ Seq(libraryDependencies := vcafDeps, resolvers := cseResolvers) ++ webSettings
  )
}

在这个例子中,vcaf-db项目位于vcaf项目文件夹的a文件夹中。vcaf-db项目没有自己的build.sbt或Build.scala文件。您会注意到我们为每个项目指定了libraryDependencies,这可能是您遗漏的环节。
如ChrisJamesC所提到的,您需要在SBT内部执行"reload"(或退出sbt并重新进入)以获取对构建定义的更改。重新加载项目后,您应该能够执行"gen-idea no-classifiers no-sbt-classifiers"并获得一个Intellij项目,其中包含在构建文件中定义的主项目、模块和库访问。
希望能够帮到您!

0

如果您想在一个 IDEA 项目中使用多个 SBT 模块,可以使用 sbt 多项目构建(也称为子项目)。只需创建一个主项目,将模块作为子项目引用,然后在主项目上运行 gen-idea。要指定模块之间的依赖关系,必须使用 Build.scala(而不是 build.sbt),例如 jxstanford 的回答或以下方式:

lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)

一个子项目层级可以正常工作(依赖关系在生成的 IDEA 项目中正确反映),但嵌套的子项目似乎不起作用。此外,似乎是 sbt 的限制,子项目必须位于主项目的子目录中(即,file("../foo") 不允许)。

另请参见 如何使用 SBT 和 IntelliJ IDEA 管理多个相互依赖的模块?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接