gpt4 book ai didi

scala - 如何在不同配置中将 SBT 用于相互依赖的项目

转载 作者:行者123 更新时间:2023-12-04 15:43:51 25 4
gpt4 key购买 nike

我想要以下 SBT build设置:

object MyBuild extends Build {

lazy val core = Project("core", file("core"))
.dependsOn(testkit % "test")

lazy val testkit = Project("testkit", file("testkit"))
.dependsOn(core % "compile")
}

core是主模块,包括域对象, testkit是一个用于测试支持代码(构建器、匹配器、测试驱动程序等;而不是测试本身)的模块,它依赖于 core 中的域对象和其他类/实用程序.

对于此设置,SBT 给出 Cyclic reference错误,尽管由于使用了不同的配置,实际上并没有循环依赖( core 编译,然后 testkit 编译取决于 core ,然后 core test 编译取决于两者)。

我找到了一种解决此问题的肮脏方法,方法是替换其中一个 dependsOn。使用 unmanagedClasspath , 例如:
.settings(unmanagedClasspath in Compile <+= (packageBin in (LocalProject("core"), Compile)))

这感觉就像一个 hack,也使得 sbt-idea生成不正确的 IntelliJ 项目(除其他外)。

有更好的解决方案的想法吗? SBT 是否支持这样的结构?

最佳答案

Sbt 仅在查找循环依赖项时检查项目。它不考虑配置。依赖性检查在多个地方执行。最重要的一个是在 LoadedBuild 的构造函数中。 .

它需要在一些地方进行更改,并且可能需要进行一些广泛的测试。如果你真的想要这个功能,我认为理论上可以添加。

最接近 sbt 本身添加依赖项的方式:

lazy val core = project.in( file("core") )
.settings(
internalDependencyClasspath in Test <++=
exportedProducts in Compile in LocalProject("testkit")
)

lazy val testkit = project.in( file("testkit") )
.settings(
internalDependencyClasspath in Compile <++=
exportedProducts in Compile in LocalProject("core")
)

关于scala - 如何在不同配置中将 SBT 用于相互依赖的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com