Maven可以将战争打包为.tar.gz吗?

Maven可以将战争打包为.tar.gz吗?,maven,docker,packaging,Maven,Docker,Packaging,我正在Maven中构建一个WAR应用程序,需要将其部署到Docker。问题是docker不支持zip格式(但可以使用.tar.gz或.tar.xz) 那么,如何将我的mywebapp-1.0.0.war打包为mywebapp-1.0.0.tar.gz 我们有这个要求,所以对docker映像执行强化步骤会变得更容易 我尝试使用汇编插件,它生成了一个目标/mywebapp-1.0.0.tar.gz。但是,它最终将整个WAR文件放在一个.tar.gz文件中,而不是其内容。这是我的assembly.xm

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

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

我们有这个要求,所以对docker映像执行强化步骤会变得更容易

我尝试使用汇编插件,它生成了一个
目标/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>

分布
tar.gz
/
target/mywebapp-1.0.0.war

虽然我觉得这个要求很奇怪(应用服务器应该解包war,而不是你),但我想可以通过对
目标中用于构建war的目录加上焦油

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

由OP编辑:

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

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

码头工人
tar.gz
假的
target/${project.build.finalName}
.
除了典型的war文件外,此解决方案还生成文件
target/mywebapp-1.0.0-docker.tar.gz


注意,它添加了
docker
分类器。

是的,我看到了该目录,但不确定是否可以使用它。谢谢另一方面,出于安全考虑,不建议应用服务器将war解包。我们被要求(从Tomcat文档)以不同用户的所有权解包。无论如何,非常感谢。也许你是对的,但AFAIK“Everyone”将打包的war上载到服务器,我从未见过有人使用你的过程。OP尝试将war文件直接部署到Docker本身,而不是Docker实例。好的,我开始理解了。是的,整个docker组装映像将发布到Artifactory服务器,以便稍后部署。docker需要完整的机器部署,而不仅仅是war文件。您需要创建完整的docker映像—jib可以做到这一点。