我是SBT的新手,我一直在尝试为此版本构建自定义任务。
我有一个简单的构建项目:
import sbt._
import Keys._
object JsonBuild extends Build{
lazy val barTask = taskKey[Unit]("some simple task")
val afterTestTask1 = barTask := { println("tests ran!") }
val afterTestTask2 = barTask <<= barTask.dependsOn(test in Test)
lazy val myBarTask = taskKey[Unit]("some simple task")
//val afterMyBarTask1 = myBarTask := { println("tests ran!") }
lazy val afterMyBarTask2 = myBarTask <<= (myBarTask).dependsOn(test in Test) map { _ => println("tests ran!") }
//settings ++ Seq(afterMyBarTask2)
override lazy val settings = super.settings ++ Seq(afterMyBarTask2)
}
我一直收到错误:
References to undefined settings:
{.}/*:myBarTask from {.}/*:myBarTask (C:\Users\haques\Documents\workspace\SBT\jsonParser\project\Build.scala:13)
{.}/test:test from {.}/*:myBarTask (C:\Users\haques\Documents\workspace\SBT\jsonParser\project\Build.scala:13)
Did you mean test:test ?
我用谷歌搜索过,我找不到解决办法。
你能解释一下它为什么不起作用吗?
答案 0 :(得分:1)
lazy val myBarTask = taskKey[Unit]("some simple task")
override lazy val settings = super.settings ++ Seq(myBarTask := { (test in Test).value; println("tests ran!") } )
致电myBarTask
时, dependsOn
未定义。你应该在使用dependsOn
之前定义它。同时value
调用键(任务/设置)是依赖其他键的首选方式。您仍然可以使用您的版本,但请定义myBarTask
答案 1 :(得分:1)
这一直困扰着。
我做了一些阅读。
我想我知道为什么上面的代码不起作用。
lazy val afterMyBarTask2 = myBarTask <<= (myBarTask).dependsOn(test in Test) map { _ => println("tests ran!") }
当我写(myBarTask).dependsOn(Test in test)时,测试的项目范围由SBT选择为ThisBuild。
{。} / test:test 来自{。} / *:myBarTask(C:\ Users \ haques \ Documents \ workspace \ SBT \ jsonParser \ project \ Build.scala:13)
ThisBuild项目范围在配置测试中没有 test 设置。
只有 项目 才能设置 测试 。
关键我认为该设置是由一些默认的SBT插件添加到项目设置中的。
使用inspect命令检查SBT中存在哪些范围设置。
如果您输入SBT REPL:
/测试{}:测试
输出结果为:
检查{。} / test:test [info]没有密钥输入。
SBT正确建议: 测试:测试是:
{文件:/ C:/用户/ haques /文档/工作区/ SBT / jsonParser /} jsonparser /测试:测试
如果未在项目范围轴中指定项目,SBT默认选择当前项目。
如果未指定,每个SBT项目都有自己的项目设置。