【问题标题】:How to use SBT IntegrationTest configuration from Scala objects如何从 Scala 对象中使用 SBT IntegrationTest 配置
【发布时间】:2015-03-26 07:37:19
【问题描述】:

为了使我们的多项目构建更易于管理,我们将 Build.scala 文件拆分为多个文件,例如Dependencies.scala 包含所有依赖项:

import sbt._

object Dependencies {
  val slf4j_api = "org.slf4j" % "slf4j-api" % "1.7.7"
  ...
}

我们想在我们的构建中添加集成测试。在SBT documentation之后我们添加了

object Build extends sbt.Build {
  import Dependencies._
  import BuildSettings._
  import Version._
  import MergeStrategies.custom

  lazy val root = Project(
    id = "root",
    base = file("."),
    settings = buildSettings ++ Seq(Git.checkNoLocalChanges, TestReport.testReport)
  ).configs(IntegrationTest).settings(Defaults.itSettings: _*)
  ...
}

其中 Dependencies、BuildSettings、Version 和 MergeStrategies 是在它们自己的文件中定义的自定义 Scala 对象。

按照文档,我们要在 Dependencies.scala 中为 IntegrationTest 配置添加一些依赖项:

import sbt._

object Dependencies {

  val slf4j_api = "org.slf4j" % "slf4j-api" % "1.7.7"

  val junit = "junit" % "junit" % "4.11" % "test,it"
...
}

不幸的是,这破坏了构建:

java.lang.IllegalArgumentException:无法添加依赖项 'junit#junit;4.11' 来配置模块的'it' ... 因为这个配置不存在!

我想我需要导入 IntegrationTest 配置。我尝试在 Dependencies.scala 中导入 IntegrationTest 配置:

import sbt.Configurations.IntegrationTest

IntegrationTest 是在 Configurations 对象中定义的惰性验证:

object Configurations {
  ...
  lazy val IntegrationTest = config("it") extend (Runtime)
  ...
 }

但这并没有解决问题。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 您提到您遵循“SBT 文档”,您能否提供指向您使用的确切文档的链接?

标签: scala sbt integration-testing


【解决方案1】:

您需要先将配置添加到Project 对象,然后再将依赖项添加到Project 对象。

你的代码引号显示你在做前者,但你没有在引用的代码中显示你在哪里做后者。

请您发布完整的配置,或者尝试移动这两个?

这是在您链接到的 SBT 文档中将配置添加到 Project 对象的位置:

lazy val root = (project in file(".")).
  configs(IntegrationTest).

您上面引用的代码声明了一个惰性 val 但不使用它,这不足以让“it”配置投入使用:

lazy val IntegrationTest = config("it") extend (Runtime)

【讨论】:

    猜你喜欢
    • 2018-04-13
    • 2011-04-09
    • 1970-01-01
    • 2013-10-30
    • 2014-11-04
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多