Sbt 如何从另一个InputAsk中调用InputAsk?

Sbt 如何从另一个InputAsk中调用InputAsk?,sbt,Sbt,在一个inputTask中,我通过编程调用另一个inputTask,例如testOnly,参数字符串如下: val readParams = inputKey[Unit]("reads version") readParams := { ... // here some Parser code val a = "*OnlyThisClassPls*" testOnly.toTask(a) } 不幸的是,我没有得到结果,而是得到了一个异常非法动态引用。为什么?我想我解决了我的问题 我

在一个
inputTask
中,我通过编程调用另一个
inputTask
,例如
testOnly
,参数字符串如下:

val readParams = inputKey[Unit]("reads version")
readParams := {
  ... // here some Parser code
  val a = "*OnlyThisClassPls*"
  testOnly.toTask(a)
}

不幸的是,我没有得到结果,而是得到了一个异常
非法动态引用
。为什么?我想我解决了我的问题

  • 我创建了一个方法,该方法使用参数将testOnly inputTask转换为动态任务(taskDyn)
  • def testOnlyWithDynamicParams(参数:String)=def.taskDyn{
    (仅在测试中测试)。toTask(参数)
    }

  • 我定义了一个动态输入任务(InputAskDyn),它使用方法转换并在最后评估s值
  • readParams:=Def.inputTaskDyn{
    …//这里是一些解析器代码
    val paramsfortstonly=“*仅限ISCLASSPLS*”
    仅使用DynamicParams进行测试(参数可选)
    }.已评估


    我不确定这是否是最好的方法,但它对我有效。如果您知道更好的解决方案,请指正。

    不,这是正确的方法。动态参考与静态参考是关于在sbt中预先知道依赖关系(通过sbt检查)。您想要做的是可能的,只是变得更加困难,因为sbt直到运行时才知道依赖关系图。