java源碼學習-JDK14之jpackage命令

魯班學院 java源碼學習-JDK14之jpackage命令java

jpackage命令使用場景程序員

使用場景是面向java桌面端程序打包. 可讓windows/mac 直接雙擊使用java程序,對系統裏面有沒有jdk/jre不作要求.windows

在這裏,咱們先理一下之前java桌面程序是怎麼運行的:app

jdk8及之前maven

這時候的java客戶端程序,主要分兩部分, 一部分是可執行jar包, 一部分是電腦裏面要裝jdk/jre , 而後經過ide

java -jar XXXXX.jar 來運行程序.模塊化

jdk9及之後的模塊化函數

這是java模塊化的一個分界線,其實jdk9,jdk10,我都沒有用過, 我是直接嘗試的jdk11. 在模塊化的基礎上, 項目多了一個文件, moudle-info.java 以下圖所示:學習

java源碼學習-JDK14之jpackage命令

如上圖,所示,主要是 requires , opens , exports 這三個關鍵字.gradle

requires : 當前模塊想要運行的話,須要哪些依賴,至關於在maven引包的基礎上,要再聲明一遍依賴

opens: 當前模塊中的哪些包,能夠被反射. 如fxml中要聲明處理的controller , 每當fxml加載的時候,都會去新建一個controller實例, 因此須要opens controller的包名給javafx.fxml

exports: 當前模塊有哪些包,能夠被引用. 通常用於別的模塊依賴當前模塊的時候

jdk9及之後的打包方式

在jdk9及之後,打包方式,能夠不侷限於打jar包,能夠把jdk的這些模塊給一塊兒用jlink打成一個鏡像.

以下我用gradle的jlink去打包

java源碼學習-JDK14之jpackage命令

最後的成果:

java源碼學習-JDK14之jpackage命令

如上所示, 會在build目錄,生成image鏡像文件夾,而後在其中有bin , conf, lib .而後用cmd運行bin目錄中的Sunflower就能夠了, 以下所示: 記住這朵Sunflower , 我要讓他怒放在廣大java程序員的桌面,哈哈

java源碼學習-JDK14之jpackage命令

能夠看到, 這時候除了程序主體存在,還有一個cmd窗口在這裏,何其不方便!!! 這時候, jdk13及之後的jpackage命令就派上用場了, 恰好我寫這個的時候, jdk14 early access 版本發佈了, 就直接拿jdk14作了實驗

JDK14的jpackage命令

在安裝好jdk14以後,可使用jpackage -h 命令看下使用說明,以下圖所示

java源碼學習-JDK14之jpackage命令

其實這個是在上一部jlink有鏡像以後,對鏡像作了一層封裝.

我最後實驗成功的打包命令是:

/Users/lixiang/soft/jdk-14.jdk/Contents/Home/bin/jpackage --runtime-image image --type dmg --name Sunflower --module red.lixiang.tools.desktopmain/com.platform.tools.desktop.DesktopMain

--runtime-image 後面跟的是文件夾, 就是咱們build目錄下的image文件夾

--type 打成什麼樣的包, 在mac系統中有 app-image , dmg , pkg三個選項, windows的我沒試,應該是有exe選項

--name 軟件的名字, 這裏是Sunflower(向日葵)

--moudle 模塊的名字,至關於之前的Main函數的格式,這裏換成了模塊 '包名'/Main函數名

運行後結果以下:

java源碼學習-JDK14之jpackage命令

最終如上圖,能夠看到生成的dmg文件, 在mac上,進行安裝就可使用了

java源碼學習-JDK14之jpackage命令

相關文章
相關標籤/搜索