Vert.x 教程 (而):如何打包一个 Vert.x 应用
这篇文章将讲解如何打包 Vert.x 应用。
依赖
添加
maven-compiler-plugin
,指定 java 编译版本。
添加
maven-shade-plugin
,指定 VertX Launcher 和 MainVerticle,在有额外依赖的时候,过滤掉依赖包里面的一些版本文件,META-INF/*.RSA
,META-INF/*.DSA
,META-INF/*.SF
,不然会导致一些 java 版本冲突的问题。
打包成 Docker image
这里会用基于不同的 jvm 去打包,一种是 HotSpot VM,JIT 模式;一种是 GraalVM,AOT 模式,JIT 和 AOT 的区别参考这篇文章。
基于 openjdk 去创建 Docker image,生成的 image 大小 500M 左右。
执行
./mvnw clean package
在 target 目录下面生成*-fat.jar。创建 Dockerfile
基于 GraalVM 的 native image 打包,需要注意两点。
由于 GraalVM 采用的是 AOT 模式,提前将所有代码编译成机器码,而 Java 中的一些反射,动态代理也需要提前分析生成,GraalVM 提供了一个参数
-agentlib:native-image-agent=config-output-dir=./src/main/resources/META-INF/native-image
,将会分析生成对应的 jni,反射,代理等配置放在指定的目录,同时为了简化运行命令,可以在相同的目录创建native-image.properties
文件,指定对应的文件地址,以及 MainVerticle 和可执行程序名称。下面是一个 native-image.properties 示例。
通过 mulitple stage 的方式减少 Docker iamge 的大小,生成的 image 大小 50M 左右,需要选择一个包含 glibc 或者 musl 的 alpine 或者 scratch 作为最终基础镜像。
基于*-fat.jar 去创建 Docker image。
执行
./mvnw clean package
在 target 目录下面生成*-fat.jar。创建 Dockerfile
完整打包方式创建 Docker image,可以用在 CI/CD 流程当中。
添加 Maven 依赖。
添加 DockerFile
版权声明: 本文为 InfoQ 作者【Kevin_913】的原创文章。
原文链接:【http://xie.infoq.cn/article/5142db26b71c7cd3f774e9914】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论