List sbt`Task`标签

问题描述 投票:1回答:1

是否可以在tags associated with a Task中列出sbt

[inspectshow”似乎没有任何内容。

scala sbt
1个回答
1
投票

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

中具有以下tagged任务定义
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()
© www.soinside.com 2019 - 2024. All rights reserved.