Scala 为什么我会得到一个;“未定义的设置”;对于项目/测试:使用新<;任务>;。所有(<;范围过滤器>;)API?

Scala 为什么我会得到一个;“未定义的设置”;对于项目/测试:使用新<;任务>;。所有(<;范围过滤器>;)API?,scala,sbt,Scala,Sbt,我试图在任务上使用新的范围过滤API来执行项目及其依赖项的所有测试 val select = ScopeFilter(inDependencies(p), inConfigurations(Test)) val agg = executeTests.all(select).map(aggregateTestOutput) executeTests in Test := agg.value 但我得到了错误 [error] Runtime reference to undefined settin

我试图在任务上使用新的范围过滤API来执行项目及其依赖项的所有测试

val select = ScopeFilter(inDependencies(p), inConfigurations(Test))
val agg = executeTests.all(select).map(aggregateTestOutput)
executeTests in Test := agg.value
但我得到了错误

[error] Runtime reference to undefined setting: 
[error] 
[error]   proj/test:executeTests from proj/test:executeTests
使用
ScopeFilter(独立性(p,includeRoot=false)、inConfigurations(Test))
,它将从项目依赖项运行测试。我甚至尝试过只创建范围过滤器
ScopeFilter(inProject(p),inConfigurations(Test))
,但它失败了,并出现了相同的错误


我需要做什么才能使这项工作正常?

设置处理器中的死代码消除可能有问题
all
是通过
flatMap
实现的,因此所有依赖项都不是静态已知的。死代码消除错误地丢弃默认的执行测试,因为它不是静态使用的。尝试显式引用上一个值,如:

val select = ScopeFilter(inDependencies(p, includeRoot=false), inConfigurations(Test))
val agg = executeTests.all(select)

executeTests in Test := {
   val outs = (executeTests in Test).value +: agg.value
   aggregateTestOutput(outs)
}

设置处理器中的死代码消除可能有问题
all
是通过
flatMap
实现的,因此所有依赖项都不是静态已知的。死代码消除错误地丢弃默认的执行测试,因为它不是静态使用的。尝试显式引用上一个值,如:

val select = ScopeFilter(inDependencies(p, includeRoot=false), inConfigurations(Test))
val agg = executeTests.all(select)

executeTests in Test := {
   val outs = (executeTests in Test).value +: agg.value
   aggregateTestOutput(outs)
}

设置处理器中的死代码消除可能有问题
all
是通过
flatMap
实现的,因此所有依赖项都不是静态已知的。死代码消除错误地丢弃默认的执行测试,因为它不是静态使用的。尝试显式引用上一个值,如:

val select = ScopeFilter(inDependencies(p, includeRoot=false), inConfigurations(Test))
val agg = executeTests.all(select)

executeTests in Test := {
   val outs = (executeTests in Test).value +: agg.value
   aggregateTestOutput(outs)
}

设置处理器中的死代码消除可能有问题
all
是通过
flatMap
实现的,因此所有依赖项都不是静态已知的。死代码消除错误地丢弃默认的执行测试,因为它不是静态使用的。尝试显式引用上一个值,如:

val select = ScopeFilter(inDependencies(p, includeRoot=false), inConfigurations(Test))
val agg = executeTests.all(select)

executeTests in Test := {
   val outs = (executeTests in Test).value +: agg.value
   aggregateTestOutput(outs)
}


嗨,马克,那不太合适。现在我得到了
[error]java.lang.AssertionError:assertion失败:sbt.EvaluateSettings$MixedNode(state=Blocked,blockedOn=1,calledBy=0,blocking=2):{file:/home/rwallace/Development/amkt/}webapp/test:test not evaluated
。我以前从未见过这样的情况,所以我还无法猜测到底发生了什么。由于前面的
executeTests
是显式引用的,您可以尝试使用
includeRoot=false
变量吗?在任何情况下,一定要提交一个bug。这似乎是个好办法。但这难道不意味着当前项目的
测试输出将不包括在结果中吗?还是我错过了什么魔法?是的。我用完整的变通方法编辑了我的答案。不要直接对
all
的结果调用
aggregateTestOutput
,而是在显式结果的前面加上前缀后调用它。当然是这样。现在一切都按照我的要求进行了。我将在上午提出一个问题。谢谢嗨,马克,那不太合适。现在我得到了
[error]java.lang.AssertionError:assertion失败:sbt.EvaluateSettings$MixedNode(state=Blocked,blockedOn=1,calledBy=0,blocking=2):{file:/home/rwallace/Development/amkt/}webapp/test:test not evaluated
。我以前从未见过这样的情况,所以我还无法猜测到底发生了什么。由于前面的
executeTests
是显式引用的,您可以尝试使用
includeRoot=false
变量吗?在任何情况下,一定要提交一个bug。这似乎是个好办法。但这难道不意味着当前项目的
测试输出将不包括在结果中吗?还是我错过了什么魔法?是的。我用完整的变通方法编辑了我的答案。不要直接对
all
的结果调用
aggregateTestOutput
,而是在显式结果的前面加上前缀后调用它。当然是这样。现在一切都按照我的要求进行了。我将在上午提出一个问题。谢谢嗨,马克,那不太合适。现在我得到了
[error]java.lang.AssertionError:assertion失败:sbt.EvaluateSettings$MixedNode(state=Blocked,blockedOn=1,calledBy=0,blocking=2):{file:/home/rwallace/Development/amkt/}webapp/test:test not evaluated
。我以前从未见过这样的情况,所以我还无法猜测到底发生了什么。由于前面的
executeTests
是显式引用的,您可以尝试使用
includeRoot=false
变量吗?在任何情况下,一定要提交一个bug。这似乎是个好办法。但这难道不意味着当前项目的
测试输出将不包括在结果中吗?还是我错过了什么魔法?是的。我用完整的变通方法编辑了我的答案。不要直接对
all
的结果调用
aggregateTestOutput
,而是在显式结果的前面加上前缀后调用它。当然是这样。现在一切都按照我的要求进行了。我将在上午提出一个问题。谢谢嗨,马克,那不太合适。现在我得到了
[error]java.lang.AssertionError:assertion失败:sbt.EvaluateSettings$MixedNode(state=Blocked,blockedOn=1,calledBy=0,blocking=2):{file:/home/rwallace/Development/amkt/}webapp/test:test not evaluated
。我以前从未见过这样的情况,所以我还无法猜测到底发生了什么。由于前面的
executeTests
是显式引用的,您可以尝试使用
includeRoot=false
变量吗?在任何情况下,一定要提交一个bug。这似乎是个好办法。但这难道不意味着当前项目的
测试输出将不包括在结果中吗?还是我错过了什么魔法?是的。我用完整的变通方法编辑了我的答案。不要直接对
all
的结果调用
aggregateTestOutput
,而是在显式结果的前面加上前缀后调用它。当然是这样。万事如意