【问题标题】:Set multiple system properties Java command line设置多个系统属性 Java 命令行
【发布时间】:2011-11-13 04:07:06
【问题描述】:

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

尽量避免这种情况:

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

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

【问题讨论】:

  • 从 Java 9 开始,您可以将部分或所有这些选项(例如,-DNAME="myName" -DVERSION="1.0" -DLOCATION="home" -jar program.jar)放入纯文本文件中,然后使用“参数文件”语法运行 java 启动器,例如, java @that_plain_text_file.

标签: java command-line system-properties


【解决方案1】:

答案是否定的。您可能已经看到了一个示例,其中有人会设置如下内容:

-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

【讨论】:

  • Also, the -D should be before the main class or the jar file 谢谢!你救了我。
【解决方案2】:

Documentation 上没有提到任何类似的东西。

这是一个引用:

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

java -Dfoo="some string" SomeClass

【讨论】:

  • SomeClass 指的是什么类?我正在尝试将此属性设置为使用 Spring、Struts 和 Tomcat 8.5 读取 .properties 文件,这是我仍然不清楚的命令的唯一部分
  • @Frakcool SomeClass 将是您尝试运行的具有主要方法的类。通常它会有一个包声明,你应该使用完全限定的类名来运行它。
  • 哦,我明白了,这是我的想法,但是在 Web 应用程序中没有 main 方法,所以,我认为它是在 tomcat 的属性中完成的,对吗?
  • @Frakcool 有多种方法可以设置系统属性。这个问题是关于从命令行设置它们。您还可以查看使用所需的系统属性设置 JAVA_OPTS 环境变量
  • 谢谢 :) 感谢您的帮助
【解决方案3】:

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

【讨论】:

  • +1:您也可以使用System.getProperties().load(new FileInputStream("my.properties")) 将它们加载到系统属性中,但是拥有自己的属性可能是更好的方法。
【解决方案4】:

您可以使用JAVA_TOOL_OPTIONS 环境变量来设置选项。它对我有用 Rasbian。请参阅Environment Variables and System Properties 有这样的说法:

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

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

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

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

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 如何使用-D 方法需要为单个属性重新构建?
    猜你喜欢
    • 2015-09-21
    • 2011-08-08
    • 2014-12-15
    • 1970-01-01
    • 2015-07-03
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多