防止来自SBT子项目

时间:2018-01-19 00:25:28

标签: sbt

我有一个SBT(v0.13)项目,其中包含多个具有以下依赖项的子项目。 root - > projectA - > projectB - >项目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

1 个答案:

答案 0 :(得分:0)

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

话虽如此,我建议您评估为什么认为有必要排除projectC。如果projectC提供了上游需要的库,请考虑将这些库分解为他们自己的项目projectBprojectC都可以依赖。