将 Intellij 与 SBT 一起使用时如何更改提供的依赖项?

Posted

技术标签:

【中文标题】将 Intellij 与 SBT 一起使用时如何更改提供的依赖项?【英文标题】:How to change Provided dependencies when using Intellij with SBT? 【发布时间】:2021-12-08 23:47:50 【问题描述】:

我的 build.sbt 看起来像这样:

libraryDependencies ++= Seq(
  "org.apache.hadoop" % "hadoop-aws" % sparkVersion % Provided,
  "org.apache.spark" %% "spark-core" % sparkVersion % Provided,
  "org.apache.spark" %% "spark-sql" % sparkVersion % Provided,
  "org.scala-lang" % "scala-library" % scalaVersion.value % Provided
)

从 Intellij 运行我的应用程序时,我收到 NoClassDefFoundError 异常,因为它找不到 spark 库。所以在使用 Intellij 时,我需要:

libraryDependencies ++= Seq(
  "org.apache.hadoop" % "hadoop-aws" % sparkVersion,
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.scala-lang" % "scala-library" % scalaVersion.value % Provided
)

但这会导致最终的扁平罐子非常大。

如何根据是否使用 Intellij 获得不同的提供的依赖项列表?

【问题讨论】:

***.com/a/21803413/1020190 可能会有所帮助。 “在 IntelliJ 中运行你的应用程序”是什么意思?单元测试? 在我的用例中,这是一个 Spark 作业,旨在在 EMR 下运行,它已经在类路径中提供了这些依赖项。在开发期间,我使用 Intellij 并且缺少这些依赖项。我想要一个 build.sbt 来解决这种情况。 【参考方案1】:

我的用例的解决方案是检查 IntelliJ Add dependencies with "provided" scope to classpath 选项。在这里找到它:How to work efficiently with SBT, Spark and "provided" dependencies?

由于 UI 已更改,以下是 Intellij 2021.2.3 的屏幕截图:

选择后,您应该会看到:

【讨论】:

以上是关于将 Intellij 与 SBT 一起使用时如何更改提供的依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 sbt/scala/play 多模块项目,该项目将与 Intellij scala 插件一起正常工作

如何从 IntelliJ IDEA 的 bash 设置 SBT 以避免格式化字符被破坏?

如何在 sbt 项目中使用来自不同位置的 scala 源并使其与 IntelliJ IDEA 一起使用?

为 Scala/SBT 设置 IntelliJ IDEA Ultimate

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

使用 sbt 将 Scala 与 Hive 数据库连接起来,使用 IntelliJ 进行依赖