首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 項目打包 JAR 時包含外部工具(如 IEDriverServer.exe)的正確姿勢

     編輯:程式設計綜合問答

問題背景

Java 項目依賴外部可執行文件(如 Selenium 的 IEDriverServer.exe),打包成 JAR 後無法運行,因 JAR 內無法直接執行嵌套的原生可執行文件。

核心原則

JAR 包只能包含類文件與資源,不能直接執行其中的 .exe/.dll/.so 文件。 必須在運行時將其釋放到臨時目錄再調用。

實現方案

  1. 資源嵌入:將 IEDriverServer.exe 放入 src/main/resources/drivers/,打包進 JAR。
  2. 運行時釋放:啟動時檢查臨時目錄,若不存在則從流複製:
private File extractDriver(String resourcePath, String fileName) throws IOException {
    File tempDir = new File(System.getProperty("java.io.tmpdir"), "myapp-drivers");
    tempDir.mkdirs();
    File target = new File(tempDir, fileName);
    if (!target.exists()) {
        try (InputStream in = getClass().getResourceAsStream(resourcePath);
             FileOutputStream out = new FileOutputStream(target)) {
            byte[] buf = new byte[8192];
            int len;
            while ((len = in.read(buf)) > 0) out.write(buf, 0, len);
        }
        target.setExecutable(true); // Linux/Mac 需賦予執行權限
    }
    return target;
}
  1. 設置系統屬性:System.setProperty("webdriver.ie.driver", extractedFile.getAbsolutePath());。

替代方案

  • 使用 WebDriverManager 庫自動下載管理驅動,無需手動打包。
  • 構建原生安裝包(如 launch4j + Inno Setup),將驅動作為獨立文件隨安裝包分發。

參考資料

百度知道 相關回答 提供了類似思路。

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