雲原生時代高效能Java框架—Quarkus(二)
阿新 • • 發佈:2020-07-24
*[**——— \*構建Quarkus本地映象、容器化部署Quarkus專案\***](http://blog.dongxishaonian.tech/?p=898)*
------
***Quarkus系列博文***
- *[Quarkus&GraalVM介紹、建立並啟動第一個專案](http://blog.dongxishaonian.tech/?p=824)*
- *[構建Quarkus本地映象、容器化部署Quarkus專案](http://blog.dongxishaonian.tech/?p=898)*
- *...*
------
## 概覽
[上一篇文章](http://blog.dongxishaonian.tech/?p=824)主要介紹了Quarkus以及給Quarkus提供“神力”的Java虛擬機器GraalVM,並演示瞭如何安裝GraalVM以及Quarkus的初步用法。本文將主要指向Quarkus的“亮點”——本地化應用程式。
**以下是本文的兩個目標:**
- 將Quarkus開發的Java應用程式編譯成本地可執行檔案。
- 將本地可執行檔案打包到容器中。
**注:在本文中本地可執行檔案又稱本地映象,二者意思相同。**
## 環境準備
以下為本文所演示時的環境配置
- Intellij IDEA
- Maven
- GraalVM 20.1.0
- Docker
接下來需要安裝GraalVM的一個擴充套件——“native-image“,此擴充套件用於將Java程式編譯成本地可執行檔案,我們執行以下命令:
```bash
gu install native-image
```
執行以下命令,檢視擴充套件是否已安裝:
```bash
$ native-image --version
```
![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggwmx5le4fj30iw010dfr.jpg)
## 生成本地可執行檔案
生成本地可執行檔案的步驟如下圖:
![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggwn0xie6tj30i909t0tf.jpg)
IDEA開啟[上一篇文章](http://blog.dongxishaonian.tech/?p=824)建立的專案,並開啟控制檯,執行maven命令:
```bash
./mvnw package -Pnative
```
控制檯輸出以下內容:
```bash
[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資料夾
![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggwnnodweyj30l40eg0ub.jpg)
可以看到其中有個重要的檔案:XXX-runner,**它是一個對JVM不依賴的本地可執行檔案**,我們可以執行他來啟動應用程式。
```bash
$ ./target/untitled-1.0-SNAPSHOT-runner
```
![img](https://tva1.sinaimg.cn/large/007S8ZIlgy1ggwnqr5rvej31ta096mzn.jpg)
成功啟動應用程式,並且啟動速度非常快