SBT 插件:如何将编译器插件添加为不向下游传播的依赖项?

2024-04-21

我正在编写一个 SBT 插件。我想使用 Circe JSON 库,但它需要 Scala 2.10 上的 Macro Paradise 编译器插件。

通常你添加编译器插件build.sbt和 SBT 插件project/plugins.sbt.

现在,当您构建 SBT 插件时,其他插件将成为依赖项,因此您将它们放入build.sbt它们会传播到您使用 SBT 插件的项目。

当我将以下代码片段放入build.sbt我的 SBT 插件:

addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full)

Paradise 编译器插件是否传播到下游项目?


默认情况下不会传播编译器插件,但下游用户实际上需要它们作为依赖项,并且您无法绕过此要求。

原因很简单,他们的代码将在不同的编译单元中编译,因此只要您具有依赖于最终代码库中找到的编译器插件的功能,您还需要在该插件上添加注释显式添加依赖项。

希望这会有所帮助,并以非常流行的 Monocle 库为例here http://julien-truffaut.github.io/Monocle/。例如,如果没有天堂,注释就不会扩展,所以这完全取决于最终用户需要什么。

Quote

如果您想使用宏注释(例如@Lenses),您还需要包括:

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

SBT 插件:如何将编译器插件添加为不向下游传播的依赖项? 的相关文章

  • 如何在使用 Json4s 序列化期间重命名字段?

    如何轻松重命名 json4s 中的字段名称 从他们的文档中 我尝试了以下代码片段 但它似乎没有重命名serial字段到id case class Person serial Int firstName String val rename F
  • 在 Products.scala 中找不到 flash

    我目前正在阅读 Peter Hilton 的 Play for Scala 我刚刚结束了第一个示例 Play 应用程序 您可以在其中构建回形针目录 然而 在编译时 我收到一个编译错误 告诉我尚未找到值 flash 通常这是我犯的一个简单错误
  • scala.collection.Seq 不适用于 Java

    Using 阿帕奇火花2 0 1 Java 7 在 Apache Spark Java API 文档中 DataSet 类出现了一个example http spark apache org docs latest api java org
  • 带尖括号 (<>) 的方法

    方法名称中是否可以有尖括号 例如 class Foo ind1 Int ind2 Int var v new Foo 1 2 v 1 3 updates ind1 v lt 1 gt 4 updates ind2 真实情况显然比这更复杂 我
  • Spark:如何从spark shell运行spark文件

    我正在使用CDH 5 2 我能够使用火花外壳运行命令 如何运行包含 Spark 命令的文件 file spark 有没有办法在没有 sbt 的情况下在 CDH 5 2 中运行 编译 scala 程序 在命令行中 您可以使用 spark sh
  • Twitter API 与 Scala 2.12 一起使用

    我正在使用 Scala 2 12 使用 SBT 构建 构建 Spark 3 0 0 流应用程序 鉴于所有用于执行此操作的库均适用于 Scala EDIT 我尝试使用库构建时得到的示例输出 object twitter is not a me
  • 如何使用 Spark 执行插入覆盖?

    我正在尝试将我们的 ETL Hive 脚本之一转换为 Spark 其中 Hive ETL 脚本维护一个表 其中需要在每晚新同步之前删除部分数据 Hive ETL 使用插入覆盖的方式将主表删除超过 3 天的数据 基本上创建一个临时表 其中的数
  • Play2 的异常无法在 postgresql 上运行

    我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据 所以在play提供的内置示例 zentasks 中 我可以找到这样的代码 object Project val simple get Pk Long project
  • 一般重写 Scala 案例类

    是否可以通用地替换案例类中的参数 更具体地说 假设我想要一个接收 查找 案例类和 替换 案例类 如语法规则的左侧和右侧 以及目标案例类的替代函数 并且该函数将返回将查找案例类的参数替换为替换案例类的新案例类 该函数还可以简单地采用一个案例类
  • 无法向 kafka 主题发送消息

    我正在使用 Kafka Play 以及 Scala 这是我的代码 我想在其中发送消息到kafka服务器 主题名称是 测试主题 尽管我没有在主题中看到我发送的消息 但我没有收到任何错误 这里有什么问题吗 import kafka produc
  • for-yield-getOrElse 是 Scala 的范例还是有更好的方法?

    基本上我想提取一堆选项 a b 等 这是在 Scala 中执行此操作的最佳方法吗 对于我来说 括号中的 for yield 看起来有点令人困惑 for a lt a b lt b c lt c yield getOrElse 尝试使用map
  • idea sbt java.lang.NoClassDefFoundError: org/apache/spark/SparkConf

    我是spark的初学者 我使用 linux idea sbt 构建了一个环境 当我尝试快速启动Spark时 我遇到了问题 Exception in thread main java lang NoClassDefFoundError org
  • Scala 中两个地图的交集和合并/连接

    假设我有两张类似这样的地图 val m1 Map 1 gt One 2 gt Two 3 gt Three val m2 Map 2 gt 2 0 3 gt 3 0 4 gt 4 0 我想根据键获取交集并返回一个表示合并值的元组 结果看起来
  • PlayFramework:如何转换 JSON 数组的每个元素

    鉴于以下 JSON values one two three 我如何在 Scala Play 中像这样转换它 values elem one elem two elem three 这很容易Play 的 JSON 转换器 https www
  • Scala 如何将 Map 转换为元组的可变参数?

    在 Scala Play 2 2 x 测试的背景下 我有一个Map String String 我需要将其传递给接受的函数 String String 即一个可变参数 String String tuple e g val data Map
  • 如何从多模块构建中的不同模块引用 SBT 设置

    在带有子模块的多模块构建中server我写了一个自定义任务server build sbt我想在其中提到baseDirectory根项目的 这是任务 lazy val genData taskKey Unit generate files
  • 选项包装值是一个好的模式吗?

    我最近写了以下 Scala 代码 val f File pretend this file came from somewhere val foo toFoo io Source fromFile f mkString 我真的不喜欢这种方式
  • Scala 2.10,它对 JSON 库和案例类验证/创建的影响

    显然 在 Scala 2 10 中我们得到了改进的反射 这将如何影响 lift json jerkson sjson 和朋友 此外 我们能否期望在不久的将来 Scala 中会出现内置的 JSON 语言功能 如 Groovy 的出色 GSON
  • Scala:尝试 .getOrElse 与 if/else

    我是一名相当新的 Scala 开发人员 我是一名经验丰富的 Java 开发人员 到目前为止 我一直很喜欢 Scala 的简单性 我真的很喜欢函数式结构 而且它们常常迫使你编写更简洁的代码 然而最近我注意到 由于舒适性和简单性 我最终使用了在
  • Spark Scala:按小时或分钟计算两列的 DateDiff

    我在数据框中有两个时间戳列 我想获取它们的分钟差异 或者小时差异 目前我可以通过四舍五入获得日差 val df2 df1 withColumn time datediff df1 ts1 df1 ts2 但是 当我查看文档页面时https

随机推荐