繁体   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