jpackage安裝Java原生本機應用的新工具

banq發表於2019-03-06

長期以來,Java開發人員一直希望構建可以直接安裝在本機平臺上的應用程式,而不是分發jar和配置類路徑。使用jpackage,可以按照特定平臺的使用者使用的方式安裝/解除安裝Java應用程式,它支援Windows上的msi和exe格式,MacOS 上的pkg和dmg以及Linux上的deb和rpm。安裝使用jpackage構建的應用程式時,終端使用者不應注意到任何差異。

jpackage的輸出是一個Java應用程式映像,包含所有必需的Java依賴項。映像儲存在檔案系統的單個目錄中,可以包含以下內容:
  • 本機應用程式啟動器
  • Java執行時映像,包括模組化應用程式時的應用程式模組
  • 應用程式資源,例如jar,ico,png
  • 配置檔案,例如plist,cfg,properties


jpackage工具計劃在新的jdk.jpackage模組中成為JDK 13的一部分。

jpackage工具有兩種模式:
  • create-image - 生成特定於平臺的應用程式映象
  • create-installer - 為應用程式生成特定於平臺的安裝程式


要生成模組化應用程式映象:

jpackage create-image --output outputdir --name AppName \
    --main-class package.ClassName -module moduleName -p modulePath
jpackage create-image --o outputdir -n AppName \
    -c package.ClassName -m moduleName -p modulePath



要生成非模組化應用程式映像:

jpackage create-image --input inputdir --output outputdir \
    --name AppName --main-class package.ClassName --main-jar MyJar.jar
jpackage create-image -i inputdir -o outputdir -n AppName \
    -c package.ClassName -j MyJar.jar



要生成應用程式安裝程式:

jpackage create-installer -i inputdir -o outputdir \
    -n  -c package.ClassName -j MyJar.jar
jpackage create-installer -o outputdir -n \
    --app-image 


要生成Java執行時安裝程式:

jpackage create-installer --runtime-installer\
    --name  --output outputdir
jpackage create-installer --runtime-installer \
    -n  -o outputdir --runtime-image 



一些適用於所有平臺的選項:
  • --main-jar -j <main jar file> - 應用程式的主要JAR; 包含主類
  • --main-class -c <class name> - 要執行的應用程式主類的限定名稱
  • --installer-type <type> - 在create-image模式下建立的安裝程式的型別(msi,exe,rpm,deb,dmg,pkg,pkg-app-store)
  • --runtime-installer - 為Java執行時生成特定於平臺的安裝程式。
  • --jvm-args <java vm arguments> - 傳遞給虛擬機器的Java引數
  • --install-dir <檔案路徑> - 應用程式安裝目錄的絕對路徑

某些選項僅適用於Mac OS X平臺:
  • --mac-sign - 請求對包進行簽名
  • --mac-bundle-name <name string> - 選單欄中顯示的應用程式的名稱
  • --mac-app-store-category <category string> - Mac App Store類別
  • --mac-signing-keychain <檔案路徑> - 要使用的鑰匙串的路徑


關於jpackage的其他有趣的事情包括:
  • 支援打包Java應用程式,使其適合提交到Windows或MacOS應用程式商店
  • 設定檔案關聯時的本機整合,以便在開啟具有關聯字尾的檔案時啟動應用程式
  • 本機整合,可以啟動特定於平臺的選單組,例如Windows上的“開始”選單項
  • 不支援交叉編譯; 應該透過在Windows上執行jpackage來建立Windows程式包
  • 將不支援超出JMOD檔案中已提供的法律檔案,例如單個許可證檔案
  • 不支援原生啟動畫面
  • 不支援自動更新機制
  • 該工具在Solaris平臺上不可用
  • 不支援Java Web Start應用程式和JavaFX特定功能
  • 該工具沒有GUI; 僅提供命令列介面(CLI)
  •  

相關文章