您的位置:首页 > 编程语言 > Java开发

如何在代码中动态设置java_library_path?

2013-08-29 18:14 573 查看
在使用Java JNI的时候,往往需要在程序启动前设定"java.library.path" 

1. 在终端情况下,java -Djava.library.path=/path/to/libs

2. 在IDE情况下,如Eclipse: Project->Properites->Java Build Path -> Source, 然后设定Native library location

注意:之后改变system properties,没有效果, 因为当程序启动时,已经缓存了system properties, 程序每次读取的属性都来自这个缓存。

System.setProperty( "java.library.path", "/path/to/libs" );
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );


解释:

Classloader有一个叫做"sys_paths"的静态属性, 它包含了system properties的路径 (这个路径被赋值当程序启动的时候)。我要这里要做的就是,把这个属性置空, 这样当我们调用loadLibrary的时候, 因为system
properties"没有被初始化", Classloader就会把我们的期望的路径("/path/to/libs")设定成功啦。

本文翻译出处 点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息