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

时间:2011-09-08 16:39:11

标签: java command-line system-properties

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

尽量避免这种情况:

 java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar

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

5 个答案:

答案 0 :(得分:48)

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

-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]);
    }
}

此外,-D应位于主命令行或java命令行中的jar文件之前。示例:java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

答案 1 :(得分:15)

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

答案 2 :(得分:14)

Documentation上没有任何内容可以提及类似的内容。

这是一个引用:

  

-Dproperty =值       设置系统属性值。如果value是一个字符串   包含空格,必须用双引号将字符串括起来:

     

java -Dfoo =“some string”SomeClass

答案 3 :(得分:3)

您可以使用JAVA_TOOL_OPTIONS环境变量来设置选项。它对我来说与Rasbian一起工​​作。请参阅Environment Variables and System Properties,其中包含:

  

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

     

这通常发生在使用嵌入式VM的应用程序中(意思是   他们使用Java Native Interface(JNI)I​​nvocation API来启动   VM),或者启动深度嵌套在脚本中的地方。在这些   环境JAVA_TOOL_OPTIONS环境变量可能很有用   增加命令行。

     

设置此环境变量时,JNI_CreateJavaVM函数   (在JNI调用API中),JNI_CreateJavaVM函数添加了   环境变量的值对其中提供的选项   JavaVMInitArgs参数。

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

  

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

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

screenshot showing use of JAVA_TOOL_OPTIONS environment variable

答案 4 :(得分:1)

如果需要在系统中设置所需的属性,则除了-D之外没有选项 但是,如果在引导应用程序时需要这些属性,则通过proerties文件加载属性是最佳选择。它不需要更改单个属性的构建。