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頁面。開發人員可以下載用於Windows、MacOS和Linux的搶先體驗版。
查看英文原文:Building Self-Contained, Installable Java Applications With JEP 343: Packaging Tool