利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件
利用 exe4j 將 JAR 包制成免安裝 JDK 的 EXE 文件
- exe4j 的工作原理
- EXE 制作教程
??將 JAR 包制成能在 Windows 上直接運行的 EXE 文件,是很多 Java 愛好者喜歡做的事情。雖然這不是對 JAR 包的商業(yè)用法,不過很多人都希望能學以致用,而不僅僅是為了自己的職業(yè)生涯。有鑒于此,本文給出了將 JAR 包制成 EXE 文件的方法。為了避免降低使用該 EXE 文件的門檻,EXE 文件在運行前最好還能免安裝 JDK,本文也給出了相應的方法。不過即便如此,在具體使用之前,也有需要了解的事項。筆者在編寫這個教程之前,幾乎踩遍了所有常見的坑。如果讀者不想重蹈覆轍,還是仔細閱讀本文。
筆者的運行環(huán)境:
-
JDK 11.0.12
-
exe4j 6.0.1
-
Windows 10 教育版
exe4j 的工作原理
??exe4j 這個軟件其實很傻瓜,很多人能可以自行制成 EXE,不過他們不清楚如何讓這個 EXE 脫離本電腦的 JDK。實際上,exe4j 這個軟件所做的工作只是封裝 JAR 包并讓此 JAR 包鏈接 JRE。也就是說,此軟件并不能免除使用 JRE,并不能將 JDK 也一同封裝到 EXE 中,但是它可以指定 EXE 讀取 JRE 的方法。一般來說,如果沒有在 exe4j 中進行這種指定,則生成的 EXE 將根據(jù)本 Windows 操作系統(tǒng)中關于 Java 的環(huán)境變量來尋找 JRE。如果進行了這種指定,則生成的 EXE 將根據(jù)指定的相對路徑來尋找 JRE。也就是說,使用此軟件能夠完成的是,使一個 Java 程序,原來需要通過 JAR 包才能運行,現(xiàn)在變成只需要一個文件夾中 EXE 文件與 JRE 文件即可運行。此結(jié)果看起來不是完全令人滿意,但也基本滿足廣大使用者的要求。
??如果讀者想將 JDK 也一同封裝到 EXE 中,可以使用在本教程使用的 exe4j 的基礎上使用另一款軟件:Inno Setup。Inno Setup 有兩項功能:
當程序的所有文件封裝成一個 EXE 文件。
生成的 EXE 文件同時是一種含軟件安裝引導界面的安裝包。
但是,Inno Setup 只對本來就可以運行的 EXE 有效。因此需要先使用在本教程的方法生成 EXE,然后再使用 Inno Setup 制作軟件安裝包。
EXE 制作教程
??下面開始真正的教程。
需要一個可以在 CMD 中單獨運行的 JAR 包。在 CMD 中運行 JAR 包的方法是,使用命令:java -jar xxx.jar。
-
為了減少不必要的踩坑,建議不要使用多 JAR 依賴。如果讀者手上有關于 Java 程序的多個依賴 JAR 包,建議將其合成一個 JAR 包。合成的方法有很多,可以借助 Java 的操作系統(tǒng)命令,也可以使用構(gòu)建工具,如 Maven。
-
如果讀者的 Java 程序是基于 Maven 的多模塊應用,則將其打成一個 JAR 包的方法,可見筆者的另一篇博客:
將 Maven 中的多模塊項目只打成一個 JAR 包:
https://blog.csdn.net/wangpaiblog/article/details/119628194?spm=1001.2014.3001.5501
-
在安裝 exe4j 前,需要先安裝 JDK。在筆者編寫本教程的時候,exe4j 最高只支持 Java 11。因此如果讀者安裝的 Java 版本高于 exe4j 的要求,exe4j 的安裝將不會成功。
前面已經(jīng)講到,EXE 的運行需要 JRE。如果希望生成的 EXE 能在其它計算機中運行,則需要另行準備 JRE。另外,Java 11 及以上的版本的安裝目錄中都沒有直接的 JRE。對于這種問題,可以從下面的方法中選擇其中一種:
-
將 JDK 當成 JRE 來使用,此時,JDK 目錄就是 JRE 的目錄。之所以這樣可行,是因為 JRE 已經(jīng)被包含在 JDK 中了,不過缺點是 JDK 目錄所占空間很大,筆者可以衡量其中的利弊。
-
上面的方法會引入多余的依賴,造成軟件所占空間過于龐大。可以自行記錄自己的項目與依賴的 JDK,然后使用如下命令生成依賴:
jlink --strip-debug --compress 1 --no-header-files --no-man-pages --output miniJre --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop -
生成 JRE 目錄。JRE 目錄所占大小一般是小于 JDK 目錄的,不過這種方法有很多弊端,生成的 JRE 目錄如果不是完整的,可能導致如下報錯:
java.lang.NoClassDefFoundError: java/util/logging/LogRecord at org.apache.commons.logging.LogAdapter$JavaUtilAdapter.createLog
生成 JRE 目錄的方法有很多,對于 Java 11,只需要在 Java 的安裝目錄的目錄 bin(如:C:\Program Files\Java\jdk-11.0.12\bin)下輸入命令:(如果 CMD 控制臺沒有管理員權限,需要先獲取管理員權限)
jlink.exe --module-path jmods --add-modules java.desktop --output jre
此時會生成一個 JRE 目錄。完整的 JRE 目錄下應該含有目錄 bin 等。需要將此 JRE 目錄移動至其它地方保存,不要放在 Java 目錄下污染環(huán)境。exe4j 在安裝時會掃描 Java 的目錄,此過程生成的 JRE 目錄會對 exe4j 形成干擾,導致其安裝失敗。
下載 exe4j。網(wǎng)址:https://exe4j.apponic.com/
安裝 exe4j 的過程很簡單,這里從略。不過要注意,安裝 exe4j 之前要下載合適的 JDK。如果安裝的 JDK 版本過低或過高,則 exe4j 將無法啟動。
準備好以下的文件:
- 本項目的 JAR 包
- JRE 文件夾。如果把 JDK 目錄當成 JRE 目錄,則需要拷貝整個 Java 安裝目錄(如:C:\Program Files\Java\jdk-11.0.12)。Java 的安裝目錄下一般有目錄 bin 等。
- EXE 圖標文件(此文件在制作完 EXE 之后就可以刪除,不過建設保留備用)
【注意】
- 如果不打算在本教程之后制作含安裝引導界面的 EXE 安裝包,則只需要將上述的這些文件放入同一個文件夾中。這樣做的話,就可以清楚地區(qū)分軟件的核心程序與通用的 JRE。
- 如果打算在本教程之后制作 含安裝引導界面的 EXE 安裝包,則需要將 本項目的 JAR 包 放入 JRE 文件夾 中。實際上,建議將所有的除 JRE 的文件全放入 JRE 文件夾`中。
打開 exe4j,填寫密鑰。筆者已經(jīng)事先有了密鑰,并保存在了本地文件夾。輸入密鑰之后就可以使用該軟件的后續(xù)功能了。
選擇將 JAR 包制成 EXE 模式。
設置應用名與 EXE 的存放地址等信息。注意:請記住此 EXE 輸出地址,此地址將成為基地址。后面的 JRE 目錄等的地址,如果使用的是相對路徑,將使用該地址作為基地址。
此處很關鍵,關系到生成的 EXE 能不能脫離本操作系統(tǒng)。
-
如果不需要生成的 EXE 在其它計算機上可運行,則此處可以直接點擊 Next。此時,生成的 EXE 會根據(jù)本操作系統(tǒng)的環(huán)境變量來尋找 JRE。如果以后更改了相應的環(huán)境變量,則此 EXE 文件那時可能會運行失敗。
-
如果希望生成的 EXE 能在其它計算機中運行,則需要進行如下操作。
【踩坑提醒】
- 如果希望生成的 EXE 支持自由復制,則此處的路徑要使用相對路徑。這就是前面為什么要將相關文件放一起。
按下圖所示操作即可。
如果點擊上面的按鈕,應用可以順序運行,說明前面的操作都已完整按筆者所指示的進行。此時,前面設置的 EXE 輸出目錄應該有了相應的 EXE 文件。
-
如果讀者前面沒有選擇自定義 JRE 目錄,則此 EXE 輸出目錄下的除 EXE 文件都可以刪去。
-
如果讀者前面選擇的是自定義 JRE 目錄,則只需保留的是 EXE 文件以及文件夾 JRE,且文件夾 JRE 與 EXE 文件的相對位置不能移動(也就是說,需要且只需要將文件夾 JRE 與 EXE 文件放在同一個文件夾下即可)。除此之外,此 EXE 輸出目錄下的其它文件均可刪去。
最后,建議運行此 EXE 來檢驗一下本次生成 EXE 是否成功。
之后,如果想制作 含安裝引導界面的 EXE 安裝包,可以使用另一款軟件:Inno Setup。
總結(jié)
以上是生活随笔為你收集整理的利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 IntelliJ IDEA 中误添加
- 下一篇: 在 IntelliJ IDEA 中创建基