在构建 SBT 编译时,我需要运行一些可以从案例类创建模式 JSON 的类

Posted

技术标签:

【中文标题】在构建 SBT 编译时,我需要运行一些可以从案例类创建模式 JSON 的类【英文标题】:While building SBT compile, I need to run some class that would create the schema JSON from Case classes 【发布时间】:2021-12-05 21:18:01 【问题描述】:

我创建了一个 scala 项目,我将其捆绑到 Jar 文件中,并将该文件部署在 Azure 上的 Databricks 中。我正在使用创建单个 Jar 文件的程序集插件。作为构建的一部分,我需要从 Scala Case 类创建模式 JSON 文件,并且在运行时我会引用 json 文件来创建模式。 那么有没有办法在编译之后和汇编之前运行 scala 脚本。 如果是,那么我将运行以 json 格式创建架构文件并将其捆绑在程序集中的脚本,并且在运行时该文件将可用于使用架构读取数据文件

【问题讨论】:

【参考方案1】:

SBT 为这种事情构建了相当多的功能,尽管我有时看起来有点挑剔。内置任务 compile:resourceGenerators 可用于生成额外的托管资源,然后 assembly 将捆绑到您的 jar 中。

本例取自documentation:

Compile / resourceGenerators += Def.task 
  val file = (Compile / resourceManaged).value / "demo" / "myapp.properties"
  val contents = "name=%s\nversion=%s".format(name.value,version.value)
  IO.write(file, contents)
  Seq(file)
.taskValue

它将一个任务添加到compile:resourceGenerators 下的任务列表中,这将在路径demo 下创建一个您配置的Compile / resourceManaged 设置文件,文件名为myapp.properties

如果您需要访问生成的字节码,您可能需要在资源生成时进行处理(创建一个依赖于compile 的自定义任务)。

【讨论】:

你好 Jarrod Baker,我没有时间测试上面的答案,一两天后我会检查它

以上是关于在构建 SBT 编译时,我需要运行一些可以从案例类创建模式 JSON 的类的主要内容,如果未能解决你的问题,请参考以下文章

您可以从 sbt 提示符注入编译器插件吗?

如何在 sbt 中运行和编译准确的一项测试?

Intellij 编译失败:“已定义为”

无法使用 sbt 在本地运行 spark 作业,但可以在 IntelliJ 中运行

SBT:编译期间查看类文件摘要?

如何让 SBT 跳过给定子项目的交叉编译?