I have an SBT (v0.13) project with multiple subprojects with the following dependencies. root -> projectA -> projectB -> projectC. Like so:
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)
As I have it now, projectA can reference an API in projectC because of transitive dependency. How can I declare a dependency on projectB without pulling projectC classes into the classpath?
I have come across solutions using notTransitive()
in libraryDependencies. Like so:
libraryDependencies ++= Seq(
"groupId" %% "artifactId" % "version" notTransitive()
)
Even if I do get to declare each one of projectC's dependencies this way (yuck!!!) projectC's APIs themselves are still available to projectA.
Appreciate any ideas on how I could do something like this (pseudo code)?
lazy val projectA = (project in file("projectA")).enablePlugins(PlayScala).dependsOn(projectB).notTransitive() // pseudo-code