使用配置文件设置 Java 系统属性

2022-09-02 09:35:17

是否可以使用某种配置文件初始化 Java 系统属性?

(即:您可以使用jar中的文件设置java.library.path吗)

编辑:澄清:我专门询问将系统属性初始化为文件中的值,而不是稍后从虚拟机内部设置它们。是的,您可以在机器启动后非常轻松地将系统属性更改为所需的任何属性,但是 Java 系统类不会使用新值。

实际上,这意味着 System.setProperty 和 System.setProperties 对于加载本机库是无用的,因为 JNI 将始终使用 java.library.path 的原始值来加载库。我试图弄清楚是否有一个更干净的替代方案,而不是把-Djava.library.path=任何东西放在任何地方的启动脚本中。


答案 1

有一种方法可以以编程方式设置java.library.path,请参阅此内容

该代码是一个在ClassLoader上设置sys_path字段的黑客,

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

Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

答案 2

自己做会很简单:

public static void main(String[] args) {
    Properties p = new Properties();
    p.load(...); // Load the properties from a file in your jar
    for (String name : p.stringPropertyNames()) {
        String value = p.getProperty(name);
        System.setProperty(name, value);
    }
}