【问题标题】:Transitive dependencies not being pulled in build.sbtbuild.sbt 中未提取传递依赖项
【发布时间】:2019-08-05 21:45:22
【问题描述】:

我有 2 个独立的项目:

  • 核心

    • API

Core 包含所有依赖项,它使用sbt clean assembly publishLocal 在本地编译和发布(使用 sbt-assembly 插件构建一个 fatjar)。然后 api 将 core 作为依赖添加到 build.sbt 中。

问题是 - 在核心的 build.sbt 中声明的依赖项似乎都没有被添加到 api - 我得到 ClassNotFound 错误,直到我将每个依赖项单独添加到 api

任何想法如何解决这个问题?

【问题讨论】:

  • 你能分享你的build.sbt。 - 顺便说一句,不将 sbt-assembly 用于库,仅用于最终项目。
  • 有时我还需要能够将core 部署为独立项目,因此使用sbt-assembly
  • 我应该分享哪个 build.sbt,coreapi? @LuisMiguelMejíaSuárez
  • 如果能同时分享就更好了。 - 显然是在删除任何敏感信息之后。

标签: scala sbt


【解决方案1】:

如果是多模块项目,请确保 api 依赖于核心:

lazy val api = project.in(file("./api"))
  .settings(api.settings)
  .settings(api.dependencies)
  .dependsOn(core)

更多信息请看这里:SBT Multi-Project

如果不是,您需要在 api 项目中的依赖项,例如:

libraryDependencies +=  "com.mycompany" % "myproject-core" % "2.0.0-SNAPSHOT"

确保路径、名称和版本正确。检查来自sbt publishLocal 的输出。它应该看起来像:

[info]  published myproject-core_2.12 to /Users/YOU/.ivy2/local/com/mycompany/myproject-core_2.12/2.0.0-SNAPSHOT/jars/myproject-core_2.12.jar

确保重新启动 SBT,并确保正确加载了 api 项目及其依赖项。

也不是 Test 依赖项没有被继承。

【讨论】:

  • 我已经在 libraryDependencies 中将其声明为您的第二个示例,但它不起作用,所以我觉得我需要第一个 - 您能解释一下多模块的含义吗?跨度>
  • 我调整了答案。我还为api 是一个单独的项目的情况添加了一些提示。在重新设置之前检查它们。
  • 因此,如果我将 core 添加到 api 的 libraryDependencies (如您的第二个示例),则应将 core 的依赖项添加到 api 的预期行为s 类路径?
  • 是的,必须如此,例外情况是您排除了一个依赖项或者它是一个测试依赖项
猜你喜欢
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2019-02-12
  • 1970-01-01
  • 2020-03-01
  • 2016-10-23
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多