首页 > 解决方案 > Maven 可以将 WAR 打包为 .tar.gz 吗?

问题描述

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

那么,我该如何打包我mywebapp-1.0.0.war的 as 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>

标签: mavendockerpackaging

解决方案


虽然我觉得这个要求很奇怪(应用程序服务器应该解压缩你的战争,而不是你),但我想可以通过将target用于构建战争的目录 tar 来解压。

在打包步骤之前,战争的所有文件都收集在目标下方的一个目录中(我忘记了名称,但应该很容易进行逆向工程) - 只需使用程序集插件打包该目录即可。

由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>

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

注意它添加了docker分类器。


推荐阅读