首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java.library.path以编程方式设置

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

Stack Overflow用户
提问于 2011-08-02 17:01:13
回答 5查看 12.3K关注 0票数 16

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

下面的代码不起作用。

代码语言:javascript
复制
    System.setProperty("java.library.path", "/blah");
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-02 17:08:31

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

代码语言:javascript
复制
-Djava.library.path=your_path

如果要从特定位置加载库,则可以使用System.load(libraryPath),其中包含库的完整路径。

票数 19
EN

Stack Overflow用户

发布于 2011-08-02 17:10:33

也许这会有帮助:Setting "java.library.path" programmatically

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

代码语言:javascript
复制
java -Djava.library.path=/path/to/libs  

稍后更改系统属性不会有任何影响,因为该属性很早就被计算并缓存。但是jdic的人发现了一种方法来解决这个问题。它有点脏--但是,正是这些技巧让我们都喜欢Java…。

代码语言:javascript
复制
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将导致在调用…时立即重新计算库路径

票数 21
EN

Stack Overflow用户

发布于 2019-10-06 16:23:39

我只是引用secmask (https://cedarsoft.com/blog.html)提供的链接,以防链接失效:

稍后更改系统属性java.library.path不会有任何影响,因为该属性很早就被计算并缓存。但是jdic的人发现了一种方法来解决这个问题。它有点脏--但是嘿,这些技巧就是我们都喜欢Java的原因。

代码语言:javascript
复制
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()时立即重新评估库路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6909581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档