Maven可以将战争打包为.tar.gz吗?
我正在Maven中构建一个WAR应用程序,需要将其部署到Docker。问题是docker不支持zip格式(但可以使用.tar.gz或.tar.xz) 那么,如何将我的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
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可以做到这一点。