如何覆盖 sbt 中对某些任务的依赖

2024-04-20

我想在某些任务中覆盖对项目的依赖。 我有一个使用 Spark 的 sbt 多项目。

lazy val core = // Some Project

val sparkLibs = Seq(
  "org.apache.spark" %% "spark-core" % "1.6.1"
)

val sparkLibsProvided = Seq(
  "org.apache.spark" %% "spark-core" % "1.6.1" % "provided"
)

lazy val main = Project(
  id = "main",
  base = file("main-project"),
  settings = sharedSettings
).settings(
  name := "main",
  libraryDependencies ++= sparkLibs,
  dependencyOverrides ++= Set(
    "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
  )
).dependsOn(core)

当我尝试制作 fat jar 以在我的纱线集群上提交时,我使用https://github.com/sbt/sbt-assemble https://github.com/sbt/sbt-assembly任务。但在这种情况下,我想使用sparkLibsProvided代替sparkLibs就像是:

lazy val sparkProvided = (project in assembly).settings(
  dependencyOverrides ++= sparkLibsProvided.toSet
)

我怎样才能正确地覆盖这种依赖关系?


您可以创建一个新项目,该项目是一个专用项目,用于使用提供的标志创建 Spark uber jar:

lazy val sparkUberJar = (project in file("spark-project"))
  .settings(sharedSettings: _*)
  .settings(
    libraryDependencies ++= sparkLibsProvided,
    dependencyOverrides ++= Set(
      "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
    )
  )

当你在 sbt 中组装时,首先进入该项目:

sbt project sparkUberJar
sbt assembly
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何覆盖 sbt 中对某些任务的依赖 的相关文章

随机推荐