在构建 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 的类的主要内容,如果未能解决你的问题,请参考以下文章