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

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

【问题讨论】:

    标签: scala apache-spark sbt sbt-assembly


    【解决方案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,我没有时间测试上面的答案,一两天后我会检查它
    猜你喜欢
    • 2014-10-18
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2012-01-27
    相关资源
    最近更新 更多