设置多个系统属性Java命令行

Tyl*_*itt 60 java command-line system-properties

是否有更简单的方法在命令行上为Java程序指定多个系统属性而不是多个-D语句?

试图避免这种情况:

 java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar
Run Code Online (Sandbox Code Playgroud)

我以为我曾经看过有人使用过一个带-D引号的字符串的例子,但我再也找不到这个例子了.

rin*_*rer 50

答案是否定的.你可能已经看过一个例子,有人会设置如下:

-DArguments=a=1,b=2,c=3,d=4,e=cow

然后应用程序将解析Arguments属性字符串的值以获取单个值.在你main为(假定输入格式有保证),就可以得到键值:

String line = System.getProperty("Arguments");
if(line != null) {
  String str[] = line.split(",");
    for(int i=1;i<str.length;i++){
        String arr[] = str[i].split("=");
        System.out.println("Key = " + arr[0]);
        System.out.println("Value = " +  arr[1]);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,-D应该在主类或jarjava命令行中的文件之前.示例:java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass


Dim*_*tri 15

您可以使用.properties来存储它们,而不是将属性作为参数传递.

  • +1:您还可以使用`System.getProperties()将它们加载到系统属性中.load(new FileInputStream("my.properties"))`但是拥有自己的属性可能是更好的方法. (5认同)

ada*_*shr 14

没有什么的文档是提到关于这样的事情.

这是一个引用:

-Dproperty = value设置系统属性值.如果value是包含空格的字符串,则必须将该字符串括在双引号中:

java -Dfoo ="some string"SomeClass


Ric*_*ers 6

您可以使用JAVA_TOOL_OPTIONS环境变量来设置选项。它对我有用 Rasbian。请参阅环境变量和系统属性,其中有这样的说法:

在许多环境中,命令行不容易通过必要的命令行选项启动应用程序。

这通常发生在使用嵌入式 VM(意味着它们使用 Java 本机接口 (JNI) 调用 API 来启动 VM)的应用程序中,或者在启动深深嵌套在脚本中的应用程序中。在这些环境中,JAVA_TOOL_OPTIONS 环境变量可用于扩充命令行。

设置此环境变量后,JNI_CreateJavaVM 函数(在 JNI 调用 API 中)、JNI_CreateJavaVM 函数会将环境变量的值添加到其 JavaVMInitArgs 参数中提供的选项。

但是,出于安全原因,可能会禁用此环境变量的使用。

在某些情况下,出于安全原因禁用此选项。例如,在 Oracle Solaris 操作系统上,当有效用户或组 ID 与实际 ID 不同时,将禁用此选项。

请参阅此示例,显示在命令行上指定与使用JAVA_TOOL_OPTIONS环境变量之间的区别。

显示使用 JAVA_TOOL_OPTIONS 环境变量的屏幕截图