【问题标题】:Prevent transitive dependencies from SBT subproject防止 SBT 子项目的传递依赖
【发布时间】:2018-06-28 04:22:25
【问题描述】:

我有一个 SBT (v0.13) 项目,其中包含多个具有以下依赖项的子项目。根 -> 项目A -> 项目B -> 项目C。像这样:

lazy val projectA = (project in file("projectA")).enablePlugins(PlayScala).dependsOn(projectB)
lazy val projectB = (project in file("projectB")).enablePlugins(PlayScala).dependsOn(projectC)
lazy val projectC = (project in file("projectC")).enablePlugins(PlayScala)

正如我现在所拥有的,由于传递依赖,projectA 可以引用 projectC 中的 API。如何在不将 projectC 类拉入类路径的情况下声明对 projectB 的依赖?

我在 libraryDependencies 中遇到了使用 notTransitive() 的解决方案。像这样:

libraryDependencies ++= Seq(
  "groupId" %% "artifactId" % "version" notTransitive()
)

即使我确实以这种方式声明了 projectC 的每个依赖项(糟糕!!!)projectC 的 API 本身仍然可供 projectA 使用。

对于我如何做这样的事情(伪代码)有什么想法吗?

lazy val projectA = (project in file("projectA")).enablePlugins(PlayScala).dependsOn(projectB).notTransitive() // pseudo-code

【问题讨论】:

    标签: sbt


    【解决方案1】:

    不确定这是否可能。您可以做的是从projectB 中删除dependsOn(projectC),并将projectC 添加为库依赖项。然后您应该可以使用notTransitive()

    话虽如此,我建议您评估一下为什么您觉得有必要排除 projectC。如果 projectC 提供上游所需的库,请考虑将它们拆分到自己的项目中,projectBprojectC 都可以依赖它们。

    【讨论】:

      猜你喜欢
      • 2023-03-17
      • 2011-08-27
      • 2011-05-30
      • 1970-01-01
      • 2018-03-20
      • 2021-09-30
      • 1970-01-01
      • 2016-10-06
      • 2014-06-24
      相关资源
      最近更新 更多