scala – 如何在不同配置中将SBT用于相互依赖的项目
发布时间:2020-12-16 18:48:50 所属栏目:安全 来源:网络整理
导读:我想有以下SBT构建设置: 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是主要模块,包括域对
我想有以下SBT构建设置:
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是一个模块,用于测试依赖于域对象和核心中的其他类/ utils的支持代码(构建器,匹配器,测试驱动程序等;而不是测试本身). 对于这种设置,SBT给出了循环引用错误,尽管由于使用了不同的配置(核心编译,然后根据核心编译testkit,然后根据两者编译核心测试),实际上没有循环依赖性. 我找到了一种通过替换其中一个dependsOn使用unmanagedClasspath解决这个问题的肮脏方法,例如: .settings(unmanagedClasspath in Compile <+= (packageBin in (LocalProject("core"),Compile))) 这感觉就像一个黑客,也让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") ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |