【问题标题】:How to call inputTask from within another inputTask?如何从另一个 inputTask 中调用 inputTask?
【发布时间】:2015-01-20 08:16:23
【问题描述】:

inputTask 中,我以编程方式 调用另一个inputTask,例如testOnly,参数字符串如下:

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

不幸的是,我得到了一个异常Illegal dynamic reference,而不是结果。为什么?

【问题讨论】:

    标签: sbt


    【解决方案1】:

    我想我解决了我的问题。

    1. 我创建了一个将 testOnly inputTask 转换为带参数的动态任务 (taskDyn) 的方法

    def testOnlyWithDynamicParams(params: String) = Def.taskDyn { (testOnly in Test).toTask(params) }

    1. 我定义了一个动态输入任务(inputTaskDyn),它使用方法来转换和评估最后的值

    readParams := Def.inputTaskDyn { ... // here some Parser code val paramsForTestOnly = " *OnlyThisClassPls*" testOnlyWithDynamicParams(paramsForTestOnly) }.evaluated

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

    【讨论】:

    • 不,这是正确的方法。 Dynamic-vs-static 参考是关于了解 sbt 中的先验依赖关系(通过 sbt 检查)。你想做的事情是可能的,只是变得更难了,因为 sbt 直到运行时才知道依赖关系图。
    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 2014-11-11
    • 2016-02-09
    • 2019-05-28
    • 2016-07-09
    • 2021-08-03
    • 2011-01-13
    • 1970-01-01
    相关资源
    最近更新 更多