是否可以在tags associated with a Task中列出sbt
?
[inspect
和show
”似乎没有任何内容。
sbt的强大之处在于,它生成的构建定义是常规的Scala应用程序,这意味着我们可以像调用其他任何Scala应用程序一样,通过简单地调用成员方法来查询其状态来检查其对象。执行sbt
启动特殊DSL构建语言的REPL,但是我们可以通过执行
sbt consoleProject
开始为真Scala REPL:
启动Scala解释器并访问您的项目定义并...
consoleProject
对于创建和以与Scala解释器相同的方式修改构建通常用于探索编写代码。请注意,这给了您原始的访问您的构建。
存在公开的tags
方法
tags
因此必须有一种方法来调用它(即使可能没有现成的顶级命令,例如final case class Task[T](info: Info[T], work: Action[T]) {
...
def tags: TagMap = info get tagsKey getOrElse TagMap.empty
}
)。假设我们在inspect
build.sbt
执行lazy val hello = taskKey[Unit]("Vulcan greeting")
hello := Def.task(println("Live long and prosper")).tag(Tags.CPU, Tags.Compile).value
后,导入了我们的构建定义
consoleProject
现在我们可以利用scala> import _root_.scala.xml.{TopScope=>$scope}
import _root_.sbt._
import _root_.sbt.Keys._
import _root_.sbt.nio.Keys._
import _root_.sbt.ScriptedPlugin.autoImport._
import _root_.sbt.plugins.IvyPlugin
import _root_.sbt.plugins.JvmPlugin
import _root_.sbt.plugins.CorePlugin
import _root_.sbt.ScriptedPlugin
import _root_.sbt.plugins.SbtPlugin
import _root_.sbt.plugins.SemanticdbPlugin
import _root_.sbt.plugins.JUnitXmlReportPlugin
import _root_.sbt.plugins.Giter8TemplatePlugin
import $d408b7d79eabe42459a4.root
import currentState._
import extracted._
import cpHelpers._
来获取Extracted#get
并像这样探索它
Extracted#get
此外,请注意TaskKey
。我们可以使用该对象访问常规的val / def成员,例如,说我们在scala> extracted.get(hello).tags
res1: sbt.ConcurrentRestrictions.TagMap = Map(Tag(cpu) -> 1, Tag(compile) -> 1)
import $d408b7d79eabe42459a4
然后我们可以像这样访问build.sbt
def helloTask = Def.task { println("Live long and prosper") } tag(Tags.CPU, Tags.Compile)
两种方法都显示所需的helloTask
。
解决注释scala> $d408b7d79eabe42459a4.helloTask.evaluate(structure.data).tags
res0: sbt.ConcurrentRestrictions.TagMap = Map(Tag(cpu) -> 1, Tag(compile) -> 1)
似乎没有因此被标记
Map(Tag(cpu) -> 1, Tag(compile) -> 1)
但是,例如,compileTask
任务确实被标记了
compileTask
因此
scala> get(Compile/compile).tags
res8: sbt.ConcurrentRestrictions.TagMap = Map()