如何摆脱SBT多模块项目中的传递性内部项目(即模块到模块)依赖性

时间:2018-01-08 05:57:40

标签: scala dependencies sbt

我有3个模块(jvmstateAccesspersistence),具有以下依赖关系:

jvm->stateAccess->persistence

我想完全将jvmpersistence隔离开,好像从jvm persistence的角度来看并不存在。因此,jvm无法从persistence导入任何内容。

但是使用以下build.sbt文件,情况并非如此:

lazy val jvm = (project in file( "jvm" ))
  .settings(...)
  .dependsOn( stateAccess % "compile->compile;test->test" )

lazy val persistence = (project in file( "persistence" ))
  .settings(...)

lazy val stateAccess = (project in file( "stateAccess" ))
  .settings(...)
  .dependsOn( persistence )

问题是jvm可以看到persistence

这是由于SBT中依赖关系的传递性:jvm可以从persistence导入类并使用它们,即使jvm不直接依赖于persistence

换句话说,我想确保jvm仅取决于stateAccess,并且不能使用persistence中的任何内容。

有没有办法禁止这种传递依赖?

1 个答案:

答案 0 :(得分:-1)

lazy val stateAccess = (project in file( "stateAccess" ))
  .settings(...)
  .dependsOn( persistence  % "compile-internal;test-internal" )

问题解决了!