scala 防止SBT子项目的传递依赖关系

ovfsdjhp  于 2023-02-22  发布在  Scala
关注(0)|答案(1)|浏览(211)

我有一个SBT(v0.13)项目,其中包含多个子项目,这些子项目具有以下依赖关系:root -〉projectA -〉projectB -〉projectC。

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。我如何声明对projectB的依赖关系,而不将projectC类拉入类路径?
我曾经遇到过在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
ilmyapht

ilmyapht1#

不确定这是否可行。您可以从projectB中删除dependsOn(projectC),并将projectC添加为库依赖项。然后您应该能够使用notTransitive()
话虽如此,我还是建议您评估一下为什么需要排除projectC,如果projectC提供上游所需的库,请考虑将这些库分解到projectBprojectC都可以依赖的自己的项目中。

相关问题