用JEP 343打包工具,構建自包含、可安裝的Java應用程序

OpenJDK社區發佈了JEP 343:打包工具的早期訪問版本。JEP 343:打包工具,又名jpackage,是打包自包含Java應用程序和Java運行時環境的新工具。這個基於JavaFX javapackager 工具的原型適用於對jpackage感興趣的開發人員。

長期以來,Java開發人員一直希望構建這樣的應用程序:可以安裝在本機平臺上,而不是分發jar和配置類路徑。藉助jpackage,可以在特定平臺上以用戶習慣的方式安裝或卸載Java應用程序,並且,它支持Windows上的msi和exe格式、MacOS上的pkg和dmg格式、Linux上的deb和rpm格式。在安裝用jpackage構建的應用程序時,最終用戶應該不會注意到任何不同。

jpackage旨在填補其他技術留下的空白,如:

  • javapackager是隨Oracle JDK 9 發佈的打包工具,在Oracle的JDK 11刪除 javaFX時,它作爲其中一部分也一起刪除了。

  • Java Web Start在Java 9中被棄用,Oracle JDK 11中還刪除了Java Applet Viewer和JNLP。

  • pack200是爲壓縮jar文件而設計的工具,其在JDK 11中被棄用,以便從未來的版本中刪除。

jpackage支持以下類型的應用程序:

  • 已用jlink鏈接到自定義運行時映像的模塊化應用程序

  • 模塊化jar文件或jmod文件中的模塊化應用程序

  • 運行在類路徑上和位於一個或多個jar文件中的遺留應用程序

jpackage的輸出是Java應用程序映像,其包含所有必需的Java依賴項。該映像存於文件系統中的單個目錄中,可以包含以下內容:

  • 本機應用程序啓動器

  • Java運行時映像,包括模塊化應用程序時的應用程序模塊

  • 應用程序資源,如jar、ico和png

  • 配置文件,如plist、cfg和properties

jpackage工具計劃成爲新的jdk.jpackage模塊中JDK 13的一部分。命令行界面將符合JEP 293: JDK命令行工具選項指南。此外,可以通過名爲“jpackage”的ToolProvider API(java.util.spi.ToolProvider)訪問jpackage。

jpackage命令行界面

當運行jpackage --help時,會顯示一組有價值的信息。我們來看看其中的一些。

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文件 >:應用程序的main JAR;包括main類

  • –main-class -c <類名>:要執行的應用程序main類的限定名

  • –installer-type <類型>:在create-image模式中創建的安裝程序類型(msi、exe、rpm、deb、dmp、pkg、pkg-app-store)

  • –runtime-installer:爲Java運行時生成特定於平臺的安裝程序

  • –jvm-args <java 虛擬機 參數>:傳遞給虛擬機的Java參數

  • –install-dir <文件路徑>:應用程序安裝目錄的絕對路徑

只適用於MacOS X平臺的一些選項:

  • –mac-sign:請求對包進行簽名

  • –mac-bundle-name <名字字符串>:在菜單欄中顯示的應用程序名稱

  • –mac-app-store-category <目錄字符串>:Mac應用程序商店目錄

  • –mac-signing-keychain <文件路徑>:要使用的密鑰鏈的路徑

關於jpackage,有一些有趣的事情需要特別注意,其中包括:

  • 支持打包Java應用程序,使其適合提交到Windows或MacOS應用商店

  • 當設置文件關聯時進行本機集成,以便在打開具有關聯後綴的文件時啓動應用程序

  • 本機集成支持啓動特定於平臺的菜單組,如Windows上的“開始(Start)”菜單項

  • 不支持交叉編譯;Windows包應該通過在Windows上運行jpackage來創建

  • 不支持JMOD文件中已經提供的法律文件,如單個許可證文件

  • 不支持原生啓動畫面

  • 不支持自動更新機制

  • 該工具在Solaris平臺上不可用

  • 不支持Java Web Start應用程序和JavaFX的特定功能

  • 該工具沒有GUI,只提供命令行界面(CLI)

關於jpackage更多的細節,請參考JEP 343: Packaging Tool頁面。開發人員可以下載用於WindowsMacOSLinux的搶先體驗版。

查看英文原文:Building Self-Contained, Installable Java Applications With JEP 343: Packaging Tool

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章