我正在尝试获取有关 sbt 项目中所有模块的信息。
有以下代码
lazy val getModule = taskKey[Module]("get single module info")
lazy val allModules = taskKey[Seq[Module]]("get all modules info")
getModule := Def.task {
Module(name.value, description.value, version.value, organization.value)
}.value,
allModules := Def.task {
val sbtModules = (ThisScope / thisProject).value.aggregate
sbtModules.map { m =>
(ThisScope.in(m) / getModule).value
}
}.value
我收到错误:
[error] problem: Task invocations inside anonymous functions are evaluated independently of whether the anonymous function is invoked or not.
...
[error] /Users/ikryvorotenko/projects/rae/rae-lib/project/SbtToGradlePlugin.scala:27:23: Illegal dynamic reference: m
[error] (ThisScope.in(m) / getModule).value
sbt 有什么东西可以动态链接任务吗?
基本上我正在寻找类似的东西Future.sequence
用于将所有任务结果链接到一个。
中描述了一些功能Tasks https://www.scala-sbt.org/1.x/docs/Tasks.html这可能会有所帮助。
First, 使用 Def.taskDyn 进行动态计算 https://www.scala-sbt.org/1.x/docs/Tasks.html#Dynamic+Computations+with允许您使用一项任务的结果来计算另一项任务。就你而言,allModules
应该(Def.taskDyn { ... }).value
.
要跨多个子项目等聚合任务,您可以使用范围过滤器 https://www.scala-sbt.org/1.x/docs/Tasks.html#ScopeFilter and .all
任务键上的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)