我能从java代码本身以编程方式设置java.library.path吗?
下面的代码不起作用。
System.setProperty("java.library.path", "/blah");发布于 2011-08-02 17:08:31
不,你不能。这个属性是一个只读值。您可以在JVM启动时使用以下命令更改它:
-Djava.library.path=your_path如果要从特定位置加载库,则可以使用System.load(libraryPath),其中包含库的完整路径。
发布于 2011-08-02 17:10:33
也许这会有帮助:Setting "java.library.path" programmatically
在处理JNI时,必须相应地设置java.library.path。不幸的是,唯一的方法是在应用程序启动之前添加一个系统属性:
java -Djava.library.path=/path/to/libs 稍后更改系统属性不会有任何影响,因为该属性很早就被计算并缓存。但是jdic的人发现了一种方法来解决这个问题。它有点脏--但是,正是这些技巧让我们都喜欢Java…。
System.setProperty( "java.library.path", "/path/to/libs" );
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null ); 解释
首先,使用新值更新系统属性。这可能是一个相对路径-或者您可能想要动态创建该路径。
类加载器有一个包含路径的静态字段(sys_paths)。如果该字段设置为null,它将自动初始化。因此,强制该字段为null将导致在调用…时立即重新计算库路径
发布于 2019-10-06 16:23:39
我只是引用secmask (https://cedarsoft.com/blog.html)提供的链接,以防链接失效:
稍后更改系统属性
java.library.path不会有任何影响,因为该属性很早就被计算并缓存。但是jdic的人发现了一种方法来解决这个问题。它有点脏--但是嘿,这些技巧就是我们都喜欢Java的原因。
System.setProperty("java.library.path", "/path/to/libs");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);说明:
首先,使用新值更新系统属性。这可能是一个相对路径-或者您可能想要动态创建该路径。类加载器有一个包含路径的静态字段(sys_paths)。如果该字段设置为null,则将其初始化,强制将该字段设置为null将导致在调用loadLibrary()时立即重新评估库路径。
https://stackoverflow.com/questions/6909581
复制相似问题