加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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")
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读