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
分类器。
我正在 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
分类器。