【问题标题】:Using sbt-native-packager, how can I add a base directory inside my tar.gz file?使用 sbt-native-packager,如何在 tar.gz 文件中添加基本目录?
【发布时间】:2015-03-20 08:55:52
【问题描述】:

我的项目使用 Play Framework 2.3.7(使用 sbt 0.13.5、sbt-native-packager 和 Activator 1.2.12),我正在生成一个 tar.gz 文件

activator universal:package-bin

生成的 tar.gz 文件包括目录(conf、bin、share、conf)。

我需要 tar.gz 文件中的基本目录 (/opt/my_application/),结果是:

/opt/my_application/conf
/opt/my_application/bin

我在 http://www.scala-sbt.org/sbt-native-packager/formats/universal.html 的 build.sbt 中尝试了几种映射组合,但均未成功。

谢谢

【问题讨论】:

    标签: playframework sbt sbt-native-packager


    【解决方案1】:

    另一种方法是添加一个 sbt 任务来调用 bash 脚本:

    lazy val generateTarGz = taskKey[Unit]("Generate tar.gz file")
    
    generateTarGz := {
        "build.sh" !    
    }
    

    然后你调用:

    activator clean stage generateTarGz
    

    将调用 bash 脚本并生成带有 target/universal/stage/* 的 tar.gz。

    【讨论】:

    • 你都可以在 sbt.除非您也提供 bat 脚本,否则使用 shell 脚本将排除所有 Windows 用户。这也使得构建比实际更复杂。
    【解决方案2】:

    您应该能够重新映射现有的mappings in Universal 如filter-remove-mappings examples 所述。我应该看看 像这样的

    mappings in Universal := {
        val universalMappings = (mappings in Universal).value
        val appName = name.value
        universalMappings map {
            case (file, path) =>  (file, s"$appName/$path")
        }
    }
    

    【讨论】:

    • 感谢这段代码,差不多了。将文件路径更改为“/opt/myapp/$path”会使 tar.gz 中的路径变为“/myapp-0.0.1-SNAPSHOT/opt/myapp/$path”。这里的问题是应用程序名称和版本是基本目录。我该如何解决这个问题?
    • 有一个open issue 可以解决这个问题。
    猜你喜欢
    • 2016-07-27
    • 2013-09-15
    • 2017-07-10
    • 2013-12-29
    • 2014-01-02
    • 2018-12-28
    • 2017-01-25
    • 2014-01-27
    • 2016-05-19
    相关资源
    最近更新 更多