我有一个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
1条答案
按热度按时间ilmyapht1#
不确定这是否可行。您可以从
projectB
中删除dependsOn(projectC)
,并将projectC
添加为库依赖项。然后您应该能够使用notTransitive()
。话虽如此,我还是建议您评估一下为什么需要排除
projectC
,如果projectC
提供上游所需的库,请考虑将这些库分解到projectB
和projectC
都可以依赖的自己的项目中。