如何缓存 sbt TaskKey 的结果?

2024-04-13

我有一项昂贵的任务需要在测试中参考

lazy val exampleSources = TaskKey[Seq[File]]("exampleSources", "for use in tests")

exampleSources := (updateClassifiers in Test).value.select(
  artifact = artifactFilter(classifier = "sources")
)

(然后我可以通过exampleSources.value作为我的分叉测试的参数)

但是,每次我运行测试时,都会调用此任务,并且updateClassifiers(昂贵)被称为。但我很高兴在第一次调用时缓存该值,然后将其用于会话。

如果不自己编写缓存,有没有办法使用内置的 sbt 对象来做到这一点?

更新:这不起作用。第二次评价有CACHE=true但解析任务仍在运行。

lazy val infoForTests = TaskKey[Seq[String]]("infoForTests", "for use in tests")

val infoForTestsCache = collection.mutable.Buffer[String]()

infoForTests := {
  println("CACHE=" + infoForTestsCache.nonEmpty)
  if (infoForTestsCache.isEmpty) {
    infoForTestsCache ++= Seq[String](
      "-Densime.compile.jars=" + jars((fullClasspath in Compile).value),
      "-Densime.test.jars=" + jars((fullClasspath in Test).value),
      "-Densime.compile.classDirs=" + classDirs((fullClasspath in Compile).value),
      "-Densime.test.classDirs=" + classDirs((fullClasspath in Test).value),
      "-Dscala.version=" + scalaVersion.value,
      // sorry! this puts a source/javadoc dependency on running our tests
      "-Densime.jars.sources=" + (updateClassifiers in Test).value.select(
        artifact = artifactFilter(classifier = "sources")
      ).mkString(",")
    )
    println("CACHE=" + infoForTestsCache.nonEmpty)
  }
  infoForTestsCache
}

您可以使用FileFunction.cached http://www.scala-sbt.org/0.13.5/docs/faq.html#how-can-a-task-avoid-redoing-work-if-the-input-files-are-unchanged缓存结果并仅在输入更改时才工作。

只是链接的 sbt 文档中的一个示例:

// define a task that takes some inputs
//   and generates files in an output directory
myTask := {
    // wraps a function taskImpl in an uptodate check
    //   taskImpl takes the input files, the output directory,
    //   generates the output files and returns the set of generated files
    val cachedFun = FileFunction.cached(cacheDirectory.value / "my-task") { (in: Set[File]) =>
      taskImpl(in, target.value) : Set[File]
    }
    // Applies the cached function to the inputs files
    cachedFun(inputs.value)
}

您可能还想查看我对类似问题的回答:如何列出增量重新编译输出的文件 https://stackoverflow.com/questions/23873031/sbt-plugin-how-to-list-files-output-by-incremental-recompilation/23876075#23876075.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何缓存 sbt TaskKey 的结果? 的相关文章

  • 如何在交互模式下运行 sbt 多个命令

    我想在 sbt 交互模式下运行多个 sbt 命令 即不离开 sbt shell Note 一些问题 https stackoverflow com q 20589951 1206998回答如何在标准 shell 中使用 sbt 将参数传递给
  • 副作用是纯函数中找不到的一切吗?

    可以肯定地说 以下二分法成立 每个给定的函数是 要么纯粹 或有副作用 如果是这样 函数的 副作用就是纯函数中找不到的任何东西 这很大程度上取决于您选择的定义 可以公平地说 函数是pure or impure 纯函数始终返回相同的结果并且不会
  • 为什么“private val”和“private Final val”不同?

    我曾经以为private val and private final val是一样的 直到我看到 Scala Reference 中的第 4 1 节 常量值定义的形式为 final val x e 其中 e 是常量表达式 第 6 24 节
  • Scala中如何将DataFrame转换为RDD?

    有人可以分享一下如何转换dataframe to an RDD Simply val rows RDD Row df rdd
  • 写入 Delta 表时检测到架构不匹配 - Azure Databricks

    我尝试将 small radio json json 加载到 Delta Lake 表 在此代码之后我将创建表 我尝试创建 Delta 表 但收到错误 写入 Delta 表时检测到架构不匹配 可能与分区有关events write form
  • 如何在 Akka Stream 中记录流量?

    我有一个带有单个流 图的 Akka Stream 应用程序 我想测量源头的流量并每 5 秒记录一次 例如 在过去 5 秒内收到 3 条消息 我尝试过 someOtherFlow groupedWithin Integer MAX VALUE
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • 将 Scala Dataframe 写入 CSV 文件时应用 UTF8 编码

    在 Spark2 Scala 中将数据帧写入 CSV 文件时如何正确应用 UTF8 编码 我正在使用这个 df repartition 1 write mode SaveMode Overwrite format csv option he
  • IntelliJ IDEA Scala 插件问题

    我对新的 Intellij IDEA 10 和 Scala 插件有疑问 当我在 Scala 源文件中输入任何内容时 编辑器会永久冻结 在其他文件 java 和其他 编辑器中效果很好 结构视图 scala 检查和显示成员功能已关闭 堆大小增加
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 重塑案例类构造函数?

    试图找到一种方法来 重塑 案例构造函数以填充某些默认值 以下情况可能吗 def reshape T R1 lt HList R2 lt HList h R1 R2 gt T example case class MyClass a Doub
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 使用 Akka 玩 2.5 - 找不到参数超时的隐式值:akka.util.Timeout

    我正在尝试使用 Play 2 5 测试 Akka 但遇到了一个似乎无法解决的编译错误 我正在关注 Play 文档中的此页面 https playframework com documentation 2 5 x ScalaAkka http
  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Scala 和变量中的模式匹配

    我是 Scala 新手 有点想知道模式匹配是如何工作的 想象一下我有以下内容 case class Cls i Int case b Cls i gt Ok case e Cls gt Ok case f Cls gt Ok case s
  • 对 Scala Not Null 特征的库支持

    Notice 从 Scala 2 11 开始 NotNull已弃用 据我了解 如果您希望引用类型不可为空 则必须混合魔法NotNull特征 编译器会自动阻止你输入null 可以值在里面 看到这个邮件列表线程 http www nabble
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • sbt 使用不同选项编译任务

    我有一个基本的 sbt 项目 我想用相同的源文件打包两个 jar 但使用不同的选项进行编译 因此 一个项目 2 个编译 但具有不同的选项 scalacOptions 和 2 个 jar 作为输出 我不想执行 sbt 两次 更改选项 有人有想

随机推荐

  • 使用文本字符串创建 Pandas 数据框中出现的单词矩阵

    我有一个包含一列文本数据的 Pandas 数据框 我想将此文本数据的每一行与我感兴趣的单词列表进行比较 比较应该生成一个矩阵 显示该行数据的文本中单词 0 或 1 的出现情况 输入数据框 text That bear talks The s
  • 我可以在 Xamarin Forms 上检查设备中的可用存储空间吗?

    我正在尝试制作一个应用程序 要求我经常将记录的数据发送到 firebase 当网络中断或电池即将耗尽时 我会保存所有未本地存储到 firebase 中的数据 然而 要做到这一点 我需要大约 20 MB 的数据 我的数据相当大 话虽这么说 我
  • 在 Swift 中从字符串中提取浮点数

    我可以使用下面的代码提取数字 let weightt x components separatedBy CharacterSet decimalDigits inverted joined separator 例如 我从字符串 0 1kg
  • Eclipse JPA 项目更改事件处理程序(等待)

    每当我尝试构建项目时 为什么会收到 JPA 项目更改事件处理程序 正在等待 我的工作区中有一些 JPA 项目 需要花费很多时间来构建我的项目 它还会导致 GC 超出限制 分配给 eclipse 的堆空间为 6GB 我目前正在使用开普勒 He
  • Jenkins 管道在条件内验证特定格式的文件是否存在

    我需要验证特定目录中是否存在 doc 格式的文件 根据该条件何时执行 即 当在具有 doc 扩展名的目录中找到文件时 它应该继续执行步骤 下面的代码无法找到 doc格式的文件 when expression return fileExist
  • 复选框列表

    我有两个域类 class Contract String number static hasMany statements Statement class Statement String code static hasMany contr
  • qgraph可以在实际边缘之外渲染边缘标签吗?

    为了便于阅读 我正在尝试在 qgraph 中的实际边缘之外插入边缘标签 我特别不喜欢在标签下方添加白色背景的选项 它会弄乱边缘 根据手册 只能沿线调整边缘标签位置 而不能在侧面调整 以前有人为此苦苦挣扎吗 是否可以规避这个问题 干杯 似乎没
  • 更改 GKE 上的 kubernetes 主环境变量

    我想在 GKE 上使用我的 Kubernetes 集群启用 Stackdriver 日志记录 这里有说明 https kubernetes io docs user guide logging stackdriver https kuber
  • PLS-00394: fetch 语句的 INTO 列表中的值数量错误

    这是我在存储过程中创建游标的尝试 Second Stored Procedure CREATE OR REPLACE PROCEDURE sp GetDiscountedRate DiscountCode IN VARCHAR2 Perce
  • 如何在Vue.js中添加一堆全局过滤器?

    我想在 Vue js 应用程序中使用一些全局过滤器 我知道我需要在主 Vue 实例之前定义它们 但从代码组织的角度来看 将它们全部放在 main js 文件中对我来说似乎并不正确 我怎样才能将定义放在一个单独的文件中 导入到 main js
  • GitHub API v3:确定用户是否是组织的所有者

    很容易确定用户是否是团队成员如果你知道id http developer github com v3 orgs teams get team member GET teams id members user 但如何才能轻松确定每个组织都拥有
  • Perl 字符串是不可变的吗?

    当我对字符串进行串联时 幕后发生了什么 my short short short cake Perl 是否有效地创建一个新字符串 然后为其分配正确的变量引用 或者 Perl 字符串本质上总是可变的 这个问题的动机来自我与一位同事的讨论 他说
  • 模板构造函数优先于普通复制和移动构造函数?

    以下程序的输出 include
  • 如何检查 VBA DAO 记录集中是否为空?

    我在数据库中有一个可选字段 我正在使用 DAO 记录集提取该字段 在将字段与其他字段连接之前 我需要检查该字段是否已设置 到目前为止 我已经尝试过以下代码片段Is and 这是明显错误的语法 Is 无济于事 看来如果我使用 它不会正确地与N
  • 添加资源文件到VC6 dll

    我有许多 VC 6 0 项目 DSP 它们构建到没有资源文件的 dll 中 知道如何将资源添加到现有项目中吗 该项目很快就会发布一个主要版本 我想为那些目前缺少的 dll 添加一个文件版本 dll 将在发布之前重新编译 因此我只是尝试使这些
  • Active Directory 是否支持事务?

    简单的问题 但我在任何地方都找不到答案 Active Directory 是否支持事务 换句话说 以下更改是否会回滚 因为我没有调用scope Complete using var scope new TransactionScope Di
  • 是否可以定义一个符合协议的Class类型的属性?

    例如 我有MyFancyData协议 如何指定 MyFancyDataClass 属性仅接受符合此协议的类 interface MyObject NSObject property Class MyFancyDataClass proper
  • 头文件中的内存分配

    我工作的公司有针对嵌入式目标的 C 开发的开发规则 一是 建议不要在头文件中分配任何存储空间 我不确定这意味着什么 写它的人不在身边 其他开发人员也不在乎 所以我在这里问 我的理解是 我不应该在头文件中声明变量 因此在 h 中不鼓励类似的操
  • 使用 caseInSensitive 在 Firebase 中保存和/或查询用户显示名称?

    我正在将我的项目从 Swift 转移到 Firebase Firebase 用户没有用户名 但我允许他们保存显示名称 该名称更像是属性而不是实际对象 如何让用户在敏感文本中使用大小写来查询其他用户 朋友 您可以轻松完成此任务 我们不知道您当
  • 如何缓存 sbt TaskKey 的结果?

    我有一项昂贵的任务需要在测试中参考 lazy val exampleSources TaskKey Seq File exampleSources for use in tests exampleSources updateClassifi