Borland 官方從未公開過這項技巧,但透過 JBuilder 自帶的核心檔案,我們竟能製作出專屬的 EXE 執行檔來啟動 Java 應用程式,甚至能控制是否顯示 Console 視窗。這篇文章將詳細拆解這項「非官方支援」的黑科技,從檔案重命名機制到 JAR 封裝進 EXE 的進階玩法,一次講清楚。
JBuilder 安裝目錄下的 bin 資料夾藏著幾個關鍵檔案:
JBuilder.exe:通用 Java 程式啟動器(會彈出 Console 視窗)JBuilderW.exe:無視窗版啟動器(類似 javaw.exe,不顯示 Console)JBuilder.config:啟動參數設定檔JavaLauncher.dll 與 jdk.config:底層支援庫關鍵在於檔名對應規則:JBuilder.exe 啟動時會自動尋找同目錄下的 JBuilder.config;若將 JBuilder.exe 改名為 MyApp.exe,它就會去讀取 MyApp.config。同理,JBuilderW.exe 改名為 MyAppW.exe 後會尋找 MyApp.exe。
E:\jbuilder8\bin\temp\)。hello/hello.java,包含 main 方法輸出「Hello, Exe file!」。JBuilder.config,將 mainclass 改為 hello.hello,並用 addpath 加入類別路徑(如 E:/jbuilder8/bin/temp/)。jdk.config,將 javapath 改為相對路徑(如 ../../jdk1.4/bin/java)。JBuilder.exe、JBuilder.config 分別改為 foo.exe、foo.config。foo.exe 即可啟動 Java 程式。原理利用 EXE 檔頭資訊在前、JAR/ZIP 索引資訊在尾的特性,兩者互不干擾:
# 1. 打包類別為 JAR
jar cvf hello.jar hello\*.class
# 2. 將 JAR 附加到 EXE 尾部
copy /b ..\JBuilder.exe+hello.jar foo.exe
接著修改 foo.config,移除原有 addpath,改為指向自身:
addpath E:/jbuilder8/bin/temp/foo.exe
執行 foo.exe,即可看到攜帶 JAR 的單一 EXE 成功運行!
此技巧屬於非官方文件化功能,Borland 不提供技術支援,生產環境使用需自行評估風險。但對於內部工具、桌面小工具或測試部署,這是極具吸引力的輕量化方案。