有没有更简单的方法在命令行上指定多个系统属性给Java程序,而不是使用多个-D语句?
试图避免这种情况:
java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar
我曾经看到过有人使用一个-D
,然后在其后添加一些带引号的字符串作为示例,但现在我找不到那个示例了。
有没有更简单的方法在命令行上指定多个系统属性给Java程序,而不是使用多个-D语句?
试图避免这种情况:
java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar
我曾经看到过有人使用一个-D
,然后在其后添加一些带引号的字符串作为示例,但现在我找不到那个示例了。
答案是否定的。您可能已经看到了一个示例,其中某人会设置类似以下内容:
-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]);
}
}
此外,在Java命令行中,-D
应该在主类或jar
文件之前。例子:java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass
文档上没有提到任何类似的内容。
这里是一个引用:
-Dproperty=value 设置系统属性值。如果value是包含空格的字符串,则必须用双引号括起来:
java -Dfoo="some string" SomeClass
SomeClass
是指哪个类?我正在尝试使用 Spring、Struts 和 Tomcat 8.5 设置此属性以读取 .properties
文件,这是命令中唯一仍不清楚的部分。 - FrakcoolSomeClass
将是您正在尝试运行的具有主方法的类。通常它会有一个包声明,您应该使用完全限定的类名来运行它。 - adarshrmain
方法,所以我认为它是在 Tomcat 的属性中完成的,我是对的吗? - FrakcoolJAVA_OPTS
环境变量。 - adarshr不必将属性作为参数传递,您可以使用 .properties 文件来存储它们。
System.getProperties().load(new FileInputStream("my.properties"))
将它们加载到系统属性中,但拥有自己的Properties可能是更好的方法。 - Peter LawreyJAVA_TOOL_OPTIONS
环境变量来设置选项。 在Rasbian上,它对我很有效。请参见环境变量和系统属性,其中提到:
但是出于安全原因,可能已禁用此环境变量的使用。在许多环境中,命令行不容易被访问以使用必要的命令行选项启动应用程序。
这通常发生在使用嵌入式VM(意味着它们使用Java本机接口(JNI)调用API来启动VM)或启动深度嵌套于脚本中的应用程序中。 在这些环境中,JAVA_TOOL_OPTIONS环境变量可用于增强命令行。
当设置了此环境变量时,在JNI Invocation API中的JNI_CreateJavaVM函数将把环境变量的值添加到其JavaVMInitArgs参数中提供的选项中。
请参阅此示例,显示在命令行上指定与使用在某些情况下,出于安全原因,会禁用此选项。例如,在Oracle Solaris操作系统上,当有效用户或组ID与实际ID不同时,将禁用此选项。
JAVA_TOOL_OPTIONS
环境变量之间的差异。
-DNAME="myName" -DVERSION="1.0" -DLOCATION="home" -jar program.jar
)放入纯文本文件中,然后使用“参数文件”语法运行java启动器,例如java @that_plain_text_file
。 - Ti Strga