iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Software Development

Quarkus, Kotlin, Reactive 雲原生服務開發系列 第 17

打包 Quarkus ,Java/Kotlin 應用可以 compile 成執行檔 - Day17

  • 分享至 

  • xImage
  •  

0.02 秒就起來的 Java 應用有看過嗎??? 雖然這個專案不大,這個速度對 JVM 來說還是很驚人

https://ithelp.ithome.com.tw/upload/images/20220923/20135701tOW2EGEZF6.png

今天要來打包 Quarkus 應用,沒有經驗也沒有關係,Quarkus 有自帶 README.md 教學,十分的貼心。所以今天我們會把 application 包成 jar 以及 native 可執行檔。為了打包成 native ,相容性的問題要先考慮。JSON Serialization lib 在 Quarkus 有以下的選擇。其中 Jackson 算是對 native 比較不會出問題。

https://ithelp.ithome.com.tw/upload/images/20220923/20135701CtBe9MCFTF.png

Artifact 說明
quarkus-resteasy-reactive-jackson JSON Serializer Jackson 的實現
quarkus-resteasy-reactive-jsonb JSON Serializer JsonB 的實現
quarkus-resteasy-reactive-kotlin-serialization JSON Serializer Kotlin Serialization 的實現

替換 Json Serializer

在 pom.xml 找到 quarkus-resteasy-reactive-kotlin-serialization 換成 quarkus-resteasy-reactive-jackson 。在 Data Class 裡面打上的 Serializable Annotation 也都可以拿掉。

打包成 jar

在 Shell console 打上 ./mvnw package 就可以直接打包,但是這樣的包跟 lib 是分散的。包成 uber-jar 整個的大包的 jar 是比較推薦的作法, 大概 20秒打包完成。在打包前建議跑個 ./mvnw clean 比較乾淨

./mvnw package -Dquarkus.package.type=uber-jar

https://ithelp.ithome.com.tw/upload/images/20220923/20135701sbeA75d5K2.png

執行 Jar

執行以下指令,用 java -jar 運行,不到一秒就起來了!!!!

java -jar target/getting-startQK-1.0.0-SNAPSHOT-runner.jar

https://ithelp.ithome.com.tw/upload/images/20220923/20135701Oh42MeUDur.png

打包成執行檔 (Native Executable)

用以下指令打包成執行檔,這個會跑比較久,大概1-3分鐘。

 ./mvnw package -Pnative

執行執行檔 : 0.02s

這是個執行檔,我們直接執行就可以囉~~~~ 哇賽,各位觀眾 - 千分之二秒

 ./target/getting-startQK-1.0.0-SNAPSHOT-runner

https://ithelp.ithome.com.tw/upload/images/20220923/20135701cC6ZuJqzQK.png

Jar 打包成 Docker Image

Quarkus 自帶了4款的 Dockerfile,裡面都有相對的指示。
https://ithelp.ithome.com.tw/upload/images/20220923/20135701UAo8f7hzOE.png

例如我們打開了src/main/docker/Dockerfile.jvm

就可以看到要下兩個指令,只是我們需要把 docker 換成 podman

./mvnw clean package
podman build -f src/main/docker/Dockerfile.jvm -t quarkus/getting-start-jvm .

明天來談談為什麼 quarkus 可以起的這麼快


上一篇
重構 Resource Layer - Fold : 在雙軌的盡頭處理 Error - Day16
下一篇
又快又小的 Quarkus 的背後魔法 ? 與 Spring Boot 的同與異
系列文
Quarkus, Kotlin, Reactive 雲原生服務開發32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言