以编程方式设置Java.library.path

Fak*_*een 15 java java-native-interface

我可以从java代码本身以编程方式设置java.library.path吗?

以下不起作用.

    System.setProperty("java.library.path", "/blah");
Run Code Online (Sandbox Code Playgroud)

Man*_*lva 19

不,你不能.此属性是只读值.您可以使用以下命令在JVM启动时更改它:

-Djava.library.path=your_path
Run Code Online (Sandbox Code Playgroud)

如果要从特定位置加载库,可以使用System.load(libraryPath)代替库的完整路径.


sec*_*ask 19

也许这有帮助http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

[编辑]链接已经死了,所以我在这里引用它

当搞乱JNI时,必须相应地设置java.library.path .不幸的是,唯一的方法是在应用程序启动之前添加系统属性 :

sys_paths

与...一样

loadLibrary() 稍后更改系统属性没有任何影响,因为很早就会对属性进行评估并进行缓存.但是那些在jdic的人发现了一种如何解决它的方法.它有点脏 - 但是嘿,那些黑客是我们都喜欢Java的原因......

java -Djava.library.path=/path/to/libs  
Run Code Online (Sandbox Code Playgroud)

说明

首先,使用新值更新系统属性.这可能是一个相对路径 - 或者您可能想要动态创建该路径.

类加载器具有包含路径的静态字段(sys_paths).如果该字段设置为null,则会自动初始化该字段.因此,只要调用loadLibrary(),强制该字段为null将导致重新评估库路径...