maven - 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>
解决方案
虽然我觉得这个要求很奇怪(应用程序服务器应该解压缩你的战争,而不是你),但我想可以通过将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
分类器。
推荐阅读
- vcpkg - 如何为正在构建的每个端口添加编译器选项?
- python - 尝试将 s3 响应正文读取为嵌套列表,将字符作为嵌套列表中的单个元素
- vb.net - Extension method not a member of List(Of ...)
- elasticsearch - 如何使用elasticsearch服务器而不是安装本地机器
- javascript - 我们可以通过javascript从chrome驱动程序的网络选项卡访问Ajax调用的响应吗?
- javascript - 如何使用 JavaScript 中的时刻将 GMT 转换为当地时间?
- c# - 如何获取 dataGridView 中每一行的第一列的所有值?
- r - 将数据子集到 ggplot2 一直有效,直到我尝试将其设为函数,然后它只给出没有数据的错误栏
- django - 这是构建模型的好方法吗?
- html - cPanel 不允许我将 Cron 作业设置为每分钟运行一次