基礎
- 本機是
win10
- GraalVM 21.0.2,用的社群版的最新版本,並配置其
bin
目錄加入環境變數 - Maven 3.9.6,用的最新版本
IDEA
,本機版本2023.2.5
- Visual Studio 2022 17.9.2,用的社群版最新版本,
quarkus
官網提到過Visual Studio 2017 Visual C++ Build Tools,可能2017或更高版本的這個也可以,但是由於本機早就裝過Visual Studio
,所以就沒有測試官網提到的工具。
初始
- 自己從
idea
中透過quarkus
模板建立一個專案即可,勾選Add sample code
,元件只選擇RESTEasy Reactive
即可,idea
的社群版可能沒有,那就去官網Quarkus - Start coding with code.quarkus.io下載初始的配置。 idea
中設定好此專案的java
和maven
的版本,就用上面的版本。- 自己在
idea
中可以執行體驗下其功能及速度等。
普通打包
- 在
idea
中介面執行打包或是mvn package
,此時和我們常用打包基本沒有區別,但是:- 打包出來的
xxx-1.0-SNAPSHOT.jar
是沒法直接用java -jar
執行的,會報xxx-1.0-SNAPSHOT.jar中沒有主清單屬性
的錯誤。 - 需切換到
target/quarkus-app
目錄下找到quarkus-run.jar
,用這個包來執行才行。 - 僅僅是執行,如果你想只複製這個
quarkus-run.jar
包到其它地方去執行也行不行的,必須把上面整個目錄都複製過去才行。
- 打包出來的
- 要想只複製一個jar包就行,則打包命令需要變成
mvn package -Dquarkus.package.type=uber-jar
才行,此時打包後直接在target
目錄下找到xxx-1.0-SNAPSHOT-runner.jar
,只複製這一個包就可以執行了。
原生打包
-
GraalVM 21
已自帶native-image
,不需要用gu install native-image
等命令這樣安裝了。 -
打包前需要配置
Visual Studio Installer
,點選修改
按鈕,如果圖省事,則可以直接選擇使用C++的桌面開發
,裡面就包含要安裝的: -
但實際不需要安裝這麼多,在
單個元件
選項中找到MSVC v143 - VS 2022 C++ x64/x86 生成工具(最新)
和Windows 10 SDK (10.0.20348.0)
(我本機是win10,所以選這個,如果是win11的系統,那就選win11開頭的),這兩個都找最新的就行,如上圖紅框。 -
點選
語言包
選項,取消中文
,只選擇英語
,否則後續打包會報native-image building on Windows currently only supports target architecture: AMD64
錯誤,參考:報錯解決 -
原生打包命令
mvn package -Dnative
,此時執行的話應該還會報一個錯誤:Failed to find 'vcvarsall.bat'
,官網提到了一種解決方法,下述命令找到本機上vcvars64.bat
實際所在位置替換掉:cmd /c 'call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && mvn package -Dnative'
但是感覺更好的方法是直接將這個
call
語句放到native-image.cmd
中(在GraalVM
安裝目錄的bin
目錄下),開啟此檔案,在最上方@echo off
下新增此呼叫,參考:解決方法@echo off call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat" > null
-
至此,再執行打包命令,費時會比較長,成功後會打包出
xxx-1.0-SNAPSHOT-runner.exe
的檔案,直接雙擊就可以執行,而且啟動速度起飛。
參考
- quarkus實戰系列
- 官方文件:BUILDING A NATIVE EXECUTABLE
- (2023版本)GraalVM+native-image+Visual Studio 在Win10上全流程安裝(避坑+實操)