首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 程式發布新思路:讓應用程式自帶 JRE 實現零安裝部署

     編輯:Java 相關知識

痛點:JRE 版本地獄與使用者安裝門檻

Java 桌面應用發布時,總面臨「使用者機器是否裝 JRE、版本是否相容」的難題。.NET CLR 隨 Windows 更新自動普及,安裝體驗更友善。若能讓應用程式「自帶 JRE」,像傳統 Win32 程式雙擊即跑,將徹底解決部署焦慮。

核心原理:java.exe 尋找 JRE 的邏輯順序

參考《Java深度歷險》一書,java.exe 啟動時按順序尋找 JRE:

  1. 自身所在目錄下是否有 jre 目錄
  2. 父目錄下是否有 jre 目錄(關鍵點)
  3. Windows 登錄檔

只要把 JRE 放在 java.exe 的父目錄,即可繞過系統登錄檔,實現獨立運行。

實作步驟:打造攜帶版 JRE

MyApp/
├── MyApp.jar
└── jre/           ← 複製 C:\Program Files\Java\jre1.5.0 全部內容到此
    ├── bin/java.exe
    └── lib/rt.jar ...

命令列驗證:

set path=c:\MyApp\jre\bin
java -verbose -jar MyApp.jar

輸出 [Opened C:\MyApp\jre\lib\rt.jar] 等訊息,證明載入的是私有 JRE。

精簡 JRE:從 70MB 壓縮到 50MB+

  • 刪除 license、bin 下除 java.exe/javaw.exe 外的執行檔
  • lib 僅保留 rt.jar, jsse.jar, jce.jar, charsets.jar
  • 移除 i386、zi (僅保留本地時區) 等子目錄
  • 進一步可剖析 jar 內部移除未用類別,但需完整回歸測試

參考 Sun JMF 內建播放器,極致精簡可達數 MB 等級。

進階:C++ Win32 啟動器隱藏 java.exe

用 Visual Studio 建立最小 Win32 GUI 程式,呼叫 CreateProcess 啟動 jre\bin\javaw.exe -jar MyApp.jar,編譯成 MyApp.exe。使用者雙擊 EXE 即可啟動,完全感知不到 Java 存在。

int PASCAL WinMain(...) {
    STARTUPINFO si; PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    if (!CreateProcess("jre\\bin\\javaw.exe", "jre\\bin\\javaw.exe -jar MyApp.jar",
        NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
        ErrorExit("CreateProcess failed.");
    }
    WaitForSingleObject(pi.hProcess, INFINITE);
    CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
}

此法將 Java 桌面應用體驗提升至原生等級,適合對部署簡易性要求高的產品化專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved