Maven可以把一个WAR打包成.tar.gz吗?

Can Maven package a WAR as .tar.gz?

我正在 Maven 中构建一个 WAR 应用程序,我需要将它部署到 Docker。问题是 docker 不支持 zip 格式(但可以使用 .tar.gz 或 .tar.xz)。

那么,如何将我的 mywebapp-1.0.0.war 打包为 mywebapp-1.0.0.tar.gz

我们有这个要求,因此对 docker 图像执行强化步骤会变得更容易。

我尝试使用 Assembly 插件,它生成了 target/mywebapp-1.0.0.tar.gz。但是,它最终将整个 WAR 文件放在 .tar.gz 文件中,而不是其内容。这是我的 assembly.xml 文件:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
                      http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>distribution</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <fileSet>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>target/mywebapp-1.0.0.war</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

虽然我觉得这个要求很奇怪(应用程序服务器应该解压你的 war,而不是你),我想通过压缩 target 中用于构建 war。

在打包步骤之前,war 的所有文件都集中在 target 正下方的目录中(我忘记了名字,但逆向工程应该很容易) - 只需使用打包该目录程序集插件。

OP 编辑​​:

我想接受这个答案,但我也希望它对其他人有用,所以我添加了工作解决方案(assembly.xml 文件)。这是:

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0
    http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>docker</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>target/${project.build.finalName}</directory>
      <outputDirectory>.</outputDirectory>
    </fileSet>
  </fileSets>
</assembly>

除了典型的 war 文件之外,此解决方案还会生成文件 target/mywebapp-1.0.0-docker.tar.gz

注意它添加了 docker 分类器。