【问题标题】:SBT: execute task using other task valueSBT:使用其他任务值执行任务
【发布时间】:2015-07-08 13:49:10
【问题描述】:

我重新定义了我的测试以提供一些从配置到测试套件的参数:

这是我的 Build.scala 的摘录:

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  val myProjectTest = Def.task {
    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306 ").value
  }
}

这没问题。

现在,我想给我的测试套件起一个这样的工件名称:

val myProjectTest = Def.task {
  val art = (Keys.artifactPath in (Compile, packageBin)).value

  (testOnly in Test).toTask(" tests.Suites -- " +
    s"-Dartifact=${art.getCanonicalPath} " +
    s"-Ddbserver=localhost " +
    s"-Ddbport=3306").value
}

但它显示以下错误消息:

[error] /tmp/aa/project/Build.scala:17: Illegal dynamic reference: art
[error]     s"-Dartifact=${art.getCanonicalPath} " +
[error]                    ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

了解一些关于 SBT 内部结构、宏、任务依赖图的知识,我什至设法使用范围解决了我的一些任务。在这里,我尝试在(Keys.artifactPath in (Compile, packageBin)) 上使用 map 或 flatMap 但无法达到预期的结果。每当我尝试访问.value 时,我都会得到Illegal dynamic reference

请指导我。我只需要将任务的值传递给其他任务(inputKey)参数即可。

SBT 版本:0.13.5

【问题讨论】:

  • 编写有效且有助于重现问题的代码将极大地帮助您解决问题。
  • 这是代码。我不期望任何研究工作,任何编写自定义构建的 sbt 用户宁愿找到足够的信息。顺便说一句,你的反对票降低了我得到快速答复的机会。

标签: scala build sbt sbt-0.13


【解决方案1】:

我从未见过通过.toTask 指定测试选项。

你想看看testOptions in Test 是否适合你吗?请参阅测试文档的 Options 部分。

【讨论】:

  • 问题是我动态生成参数,我只是从问题中省略了它,因为它不相关。我在project 目录中读取了一些文件并将值传递给测试套件。我不知道 testOptions 是否适合。
【解决方案2】:

通过反复试验,我最终使用Def.taskDyn(动态任务)完成了我想要的工作:

object Build extends Build {
  lazy val myProject = (project in file("my_project")).settings(
    test in Test := myProjectTest.value
  )

  lazy val myProjectTest = Def.taskDyn {
    val art = (Keys.artifactPath in (Compile, packageBin)).value

    (testOnly in Test).toTask(" tests.Suites -- " +
      s"-Dartifact=${art.getCanonicalPath} " +
      s"-Ddbserver=localhost " +
      s"-Ddbport=3306")
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-17
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多