簡體   English   中英

Java 確保庫在路徑環境變量中

[英]Java Make sure library is in path environment variable

我正在開發一個 Java 應用程序,它使用一個訪問 Windows dll 的外部 jar 文件。 如果我將 DLL 的路徑放在 Windows 路徑環境變量中,應用程序運行良好,但我真的不想在部署此應用程序的每台機器上設置此 Windows 環境變量。 有沒有一種方法可以設置 Java 應用程序來定位 DLL,而無需修改 Windows PATH 環境變量?

謝謝!

JVM 需要知道在哪里可以找到本機庫。 您可以在啟動應用程序時設置屬性java.library.path以包含 .dll 的路徑,如下所示:

java -jar YourJar.jar -Djava.library.path=path/to/dll

這意味着您必須編寫某種啟動器來啟動您的應用程序(一個簡單的 .bat 文件可能就足夠了)。

當 JVM 啟動時,類加載器會緩存所有庫路徑,因此一旦應用程序運行,就不容易更改或添加路徑。
如果你真的不想提供啟動器,你可以使用反射來強制類加載器在運行時重新加載緩存,如下所示:

System.setProperty("java.library.path", "path/to/dll");

// forces the classloader to reload the cache the first time a native 
// library is being loaded
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);

請注意,這是一個非常骯臟的 hack,如果您嘗試將它與不同的 JVM 一起使用或更新現有的 JVM,它可能會停止工作。

或者,您可以在啟動時使用System.load("/absolute/path/to/mydll.dll") 您需要提供 dll 的絕對路徑,但不需要額外的 JVM 參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM