【问题标题】:Create a zip with no root directory with universal sbt-native-packager使用通用 sbt-native-packager 创建一个没有根目录的 zip
【发布时间】:2015-01-07 23:27:41
【问题描述】:

我使用通用 sbt-native-packager 来生成一个 zip 文件分发。

sbt universal:packageBin

生成的 zip 文件在解压后包含一个名为我的 zip 文件的主目录中的所有内容:

unzip my-project-0.0.1.zip

my-project-0.0.1/bin
my-project-0.0.1/lib
my-project-0.0.1/conf
...

如何创建一个没有根文件夹的 zip,以便在提取时具有这样的结构?

bin
lib
conf

谢谢

【问题讨论】:

    标签: scala playframework sbt sbt-native-packager


    【解决方案1】:

    我对 sbt 和 scala 没有足够的信心来提交拉取请求。 现在必须排除 bash 脚本,所以我目前的(和丑陋的)解决方案是这个:

    packageBin in Universal := { val originalFileName = (packageBin in Universal).value val (base, ext) = originalFileName.baseAndExt val newFileName = file(originalFileName.getParent) / (base + "_dist." + ext) val extractedFiles = IO.unzip(originalFileName,file(originalFileName.getParent)) val mappings: Set[(File, String)] = extractedFiles.map( f => (f, f.getAbsolutePath.substring(originalFileName.getParent.size + base.size + 2))) val binFiles = mappings.filter{ case (file, path) => path.startsWith("bin/")} for (f <- binFiles) f._1.setExecutable(true) ZipHelper.zip(mappings,newFileName) IO.move(newFileName, originalFileName) IO.delete(file(originalFileName.getParent + "/" + originalFileName.base)) originalFileName }

    在 github 上提出的解决方案似乎比我的要好得多,即使它对我不起作用: https://github.com/sbt/sbt-native-packager/issues/276

    【讨论】:

      【解决方案2】:

      不幸的是,该顶级目录的名称看起来与可分发 zip 的名称相同(请查看 GitHub 上 the ZipHelper source 的第 24 行)。

      因此,除非您想使其可配置并提交拉取请求,否则在命令行上修改生成的 zip 可能会更容易(假设某种 UNIX 风格):

      unzip my-project-0.0.1.zip && cd my-project-0.0.1 && zip -r ../new.zip * && cd -
      

      这将在现有 zip 文件旁边创建 new.zip - 如果您愿意,您可以在顶部创建 mv

      【讨论】:

        猜你喜欢
        • 2016-05-19
        • 2014-02-28
        • 2019-02-27
        • 2014-07-06
        • 2014-01-27
        • 2015-07-16
        • 2016-12-14
        • 2014-09-13
        • 2015-07-25
        相关资源
        最近更新 更多