Scala build.sbt:解决依赖项递归
我刚从SBT开始,遇到了一个有趣的问题,我在scala SBT文档中没有看到一个很好的例子 在my build.sbt中,项目B和C依赖于A,但B也依赖于C(至少依赖于C测试范围内B的类): (公共引用根/project/Common.scala中的对象) root/build.sbt:Scala build.sbt:解决依赖项递归,scala,sbt,stack-overflow,multi-project,Scala,Sbt,Stack Overflow,Multi Project,我刚从SBT开始,遇到了一个有趣的问题,我在scala SBT文档中没有看到一个很好的例子 在my build.sbt中,项目B和C依赖于A,但B也依赖于C(至少依赖于C测试范围内B的类): (公共引用根/project/Common.scala中的对象) root/build.sbt: lazy val prjA: Project = project.in(file("Project-A")). settings( name := "Project-A", version :=
lazy val prjA: Project = project.in(file("Project-A")).
settings(
name := "Project-A",
version := Common.prjVersion,
scalaVersion := Common.scalaVersion,
libraryDependencies ++= Common.Imports.compileDependencies,
libraryDependencies ++= Common.Imports.testDependencies,
)
lazy val prjB: Project = project.in(file("Project-B")).
settings(
name := "Project-B",
version := Common.prjVersion,
scalaVersion := Common.scalaVersion,
libraryDependencies ++= Common.Imports.compileDependencies,
libraryDependencies ++= Common.Imports.testDependencies,
).dependsOn(prjA)//.dependsOn(prjC % "test->compile")
lazy val prjC: Project = project.in(file("Project-C")).
settings(
name := "Project-C",
version := Common.prjVersion,
scalaVersion := Common.scalaVersion,
libraryDependencies ++= Common.Imports.compileDependencies,
libraryDependencies ++= Common.Imports.testDependencies,
).dependsOn(prjA).dependsOn(prjB)
正如本文所写的,这个build.sbt运行成功(通过sbt clean update compile),但可以肯定的是,我无法在prjB中启动测试用例。一旦我在build.sbt中的prjB
上建立了.dependsOn(prjC%“test->compile”)
,输出就是stackoverflowerr
——这对我来说非常有意义,因为prjB和prjC之间的交叉依赖无法解决
然而,有没有一种切实可行的方法来解决这种无休止的递归?我正在考虑构建过程中的另一个步骤(如您所见,1和2由实际的build.sbt完成),但我不知道如何做到这一点
解决这个问题的唯一方法是改变模块本身的结构。例如,如果可能,您可以创建一个包含公共类的D项目,并使它们都依赖于它。或者,使用。我知道解决交叉依赖性的一般问题,但我希望通过sbt的作用域依赖性,我可以解决这样一个只“存在”于测试范围内的交叉依赖性。从理论上讲,如果prjB和prjC使用其主要依赖项进行编译,则在测试范围内,如果prjB仅在编译后依赖于prjC,则交叉依赖项将得到解决。然而,告诉SBT将编译好的prjC类放入prjB中进行测试可能会很复杂,而且您的方法(我构建了一个“测试”项目)是有效的。这解决了我的问题,谢谢!