【问题标题】:How to copy config files as part of packaging for use in deployment?如何复制配置文件作为打包的一部分以用于部署?
【发布时间】:2014-10-10 20:39:11
【问题描述】:

我使用 sbt 0.13.5 构建一个项目,其中包含一些在部署后需要人工编辑的配置文件。

使用sbt-native-packagerstage 命令构建我用于部署的基本输出目录结构。这会产生一个带有启动脚本的bin 文件夹和一个lib 文件夹中的所有jar。太好了。

这只是将文本配置文件逐字复制到 bin/lib/ 文件夹旁边的 conf 文件夹中(不包含在任何 jar 中)。

如何使用 sbt 将这些配置文件复制到文件系统上的输出目录(而不是任何 jars)?

【问题讨论】:

    标签: sbt sbt-native-packager


    【解决方案1】:

    我不确定对 src/main/conf 目录或类似目录的开箱即用支持,除非您找到它,否则请使用以下解决方法:

    packageArchetype.java_application
    
    mappings in Universal ++= {
      ((sourceDirectory in Compile).value / "conf" * "*").get.map { f => 
        f -> s"conf/${f.name}"
      }
    }
    

    它将src/main/conf下的文件映射到包中的conf目录。

    注意:我很确定我在the code 中看到某处支持conf 目录。

    【讨论】:

    • 昨晚我的 hack 很有趣:mappings in Universal ++= PathFinder(baseDirectory(_ / "conf" ).value).***.pair { x => Option(x.name) } 我仍然希望文件复制任务是内置任务。我们采用的这种方法只是调整一个设置,该设置恰好包含由 sbt 内部复制的文件。
    【解决方案2】:

    默认的通用约定是复制 src/univeral/ 下的文件/目录。因此,要在发行版中包含 conf/ 目录,只需添加 src/universal/conf 并在其中复制配置文件。信用:this link

    【讨论】:

      【解决方案3】:

      这似乎是一个“更好”的答案,因为我将 sbt 与 sbt-native-packager 插件一起使用:

      mappings in Universal ++= contentOf(  baseDirectory.value / "conf" )
      

      这会获取指定“conf”文件夹下的所有文件并将它们转储到包根文件夹中。

      它使用了我在 sbt-native-packager 中的 very terse documentation 中偶然发现的 MappingsHelper

      【讨论】:

      • Khoa 的回答更好,假设约定优于配置是一件好事。
      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多