Java语言图书馆以编程方式设置路径

 2023-01-21    245  

问题描述

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

以下内容不起作用.

Java语言图书馆以编程方式设置路径

System.setProperty("java.library.path", "/blah");

推荐答案

不,你不能.此属性是唯一的值.您可以在JVM启动时间更改它:

-Djava.library.path=your_path

如果要从特定位置加载库,则可以使用 system.load(librarypath)而不是通往库的完整路径.

其他推荐答案

也许这会有所帮助:设置” java.library.path” >

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

java -Djava.library.path=/path/to/libs

以后更改系统属性没有任何效果,因为该物业的评估很早并缓存.但是,JDIC的家伙发现了一种如何解决它的方法.有点脏 – 但是,嘿,这些hack是我们都喜欢java的原因……

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).如果该字段设置为空,则将自动初始化.因此,将该字段迫使该字段将导致库路径的重新评估,因为loadLibrary()被称为…

其他推荐答案

我只是从secmask提供的链接中引用( https://cedarsoft.com/blog.html ),以防该链接死亡:

更改系统属性java.library.path后来没有
任何效果,因为该物业的评估很早并且被缓存.但
JDIC的家伙们发现了一种如何解决它的方法.它是一个
有点脏 – 但是,嘿,这些黑客是我们都喜欢的原因
爪哇.

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将导致库路径的重新评估.

以上所述是小编给大家介绍的Java语言图书馆以编程方式设置路径,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26254.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。