我有一个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
答案 0 :(得分:0)
不确定这是否可行。您可以做的是从dependsOn(projectC)
中删除projectB
并添加projectC
作为库依赖项。然后,您应该可以使用notTransitive()
。
话虽如此,我建议您评估为什么认为有必要排除projectC
。如果projectC
提供了上游需要的库,请考虑将这些库分解为他们自己的项目projectB
和projectC
都可以依赖。