加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在sbt中将输入任务与动态任务相结合

发布时间:2020-12-16 18:38:52 所属栏目:安全 来源:网络整理
导读:我想做一个输入任务,继续用户输入并生成一堆子任务来运行.这是一个例子: import sbt._import Keys._import Def.Initializeimport complete.DefaultParsers._object TestBuild extends Build { val sampleInput = inputKey[Seq[String]]("sample dynamic inp
我想做一个输入任务,继续用户输入并生成一堆子任务来运行.这是一个例子:

import sbt._
import Keys._
import Def.Initialize
import complete.DefaultParsers._

object TestBuild extends Build {
  val sampleInput = inputKey[Seq[String]]("sample dynamic input task")
  val sampleDynamic = taskKey[Seq[String]]("sample dynamic task")

  override lazy val settings = super.settings ++ Seq(
    sampleDynamic := Def.taskDyn {
      val sources = Seq("ab","csd","efda")
      sources.map(sampleTaskFor _).joinWith(_.join)
    }.value,sampleInput := Def.inputTaskDyn {
      val sources = spaceDelimited("<arg>").parsed
      sources.map(sampleTaskFor _).joinWith(_.join)
    }.value
  )

  private def sampleTaskFor(source : String) : Initialize[Task[String]] = Def.task {
    source + " : " + source
  }
}

有两个样本.第一个工作并显示带有预定义输入的简单taskDyn.第二个是用户输入的动态任务,拒绝编译我无法解释的错误

[error] home/project/build.scala:15: Illegal dynamic reference: Def
[error]     sampleInput := Def.inputTaskDyn {
[error]                                     ^
[error] one error found
[error] (compile:compile) Compilation failed

我怎么能避免呢?

试用和错误日志

在那里,我会将我的问题附加到仍然无法解决问题的不同提议的更改

用InputTask.evaluated替换InputTask.value

sources.map(sampleTaskFor _).joinWith(_.join)
-   }.value
+   }.evaluated
  )

如果我能够定义正确的InputTask,它应该通过evaluate方法访问,因为我在尝试使用编译的不同InputTasks后在文档和实践中都找到了.

仍然不能解决sbt宏引擎拒绝提供inputTaskDyn的问题.

等待其他建议

解决方法

试错法给了我答案,但没有一点理解.这里是:

import sbt._
import Keys._
import Def.Initialize
import complete.DefaultParsers._

object TestBuild extends Build {
  val sampleInput = inputKey[Seq[String]]("sample dynamic input task")
  val sampleDynamic = taskKey[Seq[String]]("sample dynamic task")

  override lazy val settings = super.settings ++ Seq(
    sampleDynamic := Def.taskDyn {
      val sources = Seq("ab",sampleInput := Def.inputTaskDyn {
      val sources = spaceDelimited("<arg>").parsed
      sampleTaskAll(sources)
    }.evaluated
  )

  private def sampleTaskFor(source : String) : Initialize[Task[String]] = Def.task {
    source + " : " + source
  }

  private def sampleTaskAll(sources : Seq[String]) : Initialize[Task[Seq[String]]] = Def.taskDyn {
    sources.map(sampleTaskFor _).joinWith(_.join)
  }
}

出于某种原因,我无法理解您应该在单独的方法中隔离创建多任务单个任务的顺序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读