云原生时代高性能Java框架—Quarkus(二)
——— *构建Quarkus本地镜像、容器化部署Quarkus项目*
Quarkus系列博文
概览
上一篇文章主要介绍了Quarkus以及给Quarkus提供“神力”的Java虚拟机GraalVM,并演示了如何安装GraalVM以及Quarkus的初步用法。本文将主要指向Quarkus的“亮点”——本地化应用程序。
以下是本文的两个目标:
- 将Quarkus开发的Java应用程序编译成本地可执行文件。
- 将本地可执行文件打包到容器中。
注:在本文中本地可执行文件又称本地镜像,二者意思相同。
环境准备
以下为本文所演示时的环境配置
- Intellij IDEA
- Maven
- GraalVM 20.1.0
- Docker
接下来需要安装GraalVM的一个扩展——“native-image“,此扩展用于将Java程序编译成本地可执行文件,我们执行以下命令:
gu install native-image
运行以下命令,查看扩展是否已安装:
$ native-image --version
生成本地可执行文件
生成本地可执行文件的步骤如下图:
IDEA打开上一篇文章创建的项目,并打开控制台,执行maven命令:
./mvnw package -Pnative
控制台输出以下内容:
[INFO] Scanning for projects...
...
[INFO] Building untitled 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
...
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.example.ExampleResourceTest
2020-07-19 22:24:08,962 INFO [io.quarkus] (main) Quarkus 1.6.0.Final on JVM started in 1.085s. Listening on: http://0.0.0.0:8081
...
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
...
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM Version 20.1.0 (Java Version 11.0.7)
...
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 93802ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:45 min
[INFO] Finished at: 2020-07-19T22:25:44+08:00
[INFO] ------------------------------------------------------------------------
打开项目中的target文件夹
可以看到其中有个重要的文件:XXX-runner,它是一个对JVM不依赖的本地可执行文件,我们可以运行他来启动应用程序。
$ ./target/untitled-1.0-SNAPSHOT-runner
成功启动应用程序,并且启动速度非常快