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

19 java java-native-interface properties

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

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

编辑:澄清:我特别要求将系统属性初始化为文件中的值,而不是稍后从虚拟机内部设置它们.是的,您可以在计算机启动后将系统属性更改为您想要的任何内容,但Java系统类不会使用新值.

实际上,这意味着System.setProperty和System.setProperties对于加载本机库毫无用处,因为JNI将始终使用java.library.path的原始值来加载库.我试图找出是否有一个更清洁的替代方案,只需将-Djava.library.path =放在任何地方的启动脚本中.

sbr*_*ges 14

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

代码是在ClassLoader上设置sys_path字段的hack,

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

Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
Run Code Online (Sandbox Code Playgroud)


Rya*_*art 12

做你自己很简单:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • OP 澄清:“我具体询问将系统属性初始化为文件中的值,而不是稍后从虚拟机内部设置它们。” (2认同)

Jar*_*zek 6

使用JAVA_TOOL_OPTIONS环境变量。_JAVA_OPTIONS也可能有效,但根本没有记录。该JAVA_TOOL_OPTIONS文档的记录很薄弱,但这里有一些链接:

使用示例:

set JAVA_TOOL_OPTIONS=-Dmy.property=sth
Run Code Online (Sandbox Code Playgroud)

启动 JVM 时,您应该看到一条消息:

Picked up JAVA_TOOL_OPTIONS: ...
Run Code Online (Sandbox Code Playgroud)