windows下體驗quarkus原生編譯打包

漫游云巅發表於2024-03-09

基礎

  • 本機是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中設定好此專案的javamaven的版本,就用上面的版本。
  • 自己在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上全流程安裝(避坑+實操)

相關文章