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

发布于 2024-12-03 21:16:48 字数 238 浏览 0 评论 0原文

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

试图避免这种情况:

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

我以为我看到过一个例子,有人使用一个 -D 和之后的一些带引号的字符串,但我无法再次找到该示例。

Is there an easier way to specify multiple System Properties on the command line to a Java program rather than having multiple -D statements?

Trying to avoid this:

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

I thought I had seen an example of someone using one -D and some quoted string after that, but I can't find the example again.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

追星践月 2024-12-10 21:16: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 应该位于主类或 jar< 之前/code> java 命令行中的文件。示例:java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

Answer is NO. You might have seen an example where somebody would have set something like :

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

Then the application would parse value of Arguments property string to get individual values.
In your main you can get the key values as(Assuming input format is guaranteed):

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

Also, the -D should be before the main class or the jar file in the java command line. Example : java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

ㄟ。诗瑗 2024-12-10 21:16:48

文档中没有任何内容提到任何内容像那样。

这是一个引用:

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

java -Dfoo="some string" SomeClass

There's nothing on the Documentation that mentions about anything like that.

Here's a quote:

-Dproperty=value
Set a system property value. If value is a string that
contains spaces, you must enclose the string in double quotes:

java -Dfoo="some string" SomeClass

过潦 2024-12-10 21:16:48

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

Instead of passing the properties as an argument, you may use a .properties for storing them.

独自←快乐 2024-12-10 21:16:48

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

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

使用嵌入式虚拟机的应用程序经常会发生这种情况(意味着
他们使用 Java 本机接口 (JNI) 调用 API 来启动
VM),或者启动深度嵌套在脚本中。在这些
JAVA_TOOL_OPTIONS 环境变量可能很有用
增强命令行。

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

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

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

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

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

You may be able to use the JAVA_TOOL_OPTIONS environment variable to set options. It worked for me with Rasbian. See Environment Variables and System Properties which has this to say:

In many environments, the command line is not readily accessible to
start the application with the necessary command-line options.

This often happens with applications that use embedded VMs (meaning
they use the Java Native Interface (JNI) Invocation API to start the
VM), or where the startup is deeply nested in scripts. In these
environments the JAVA_TOOL_OPTIONS environment variable can be useful
to augment a command line.

When this environment variable is set, the JNI_CreateJavaVM function
(in the JNI Invocation API), the JNI_CreateJavaVM function adds the
value of the environment variable to the options supplied in its
JavaVMInitArgs argument.

However this environment variable use may be disabled for security reasons.

In some cases, this option is disabled for security reasons. For
example, on the Oracle Solaris operating system, this option is
disabled when the effective user or group ID differs from the real ID.

See this example showing the difference between specifying on the command line versus using the JAVA_TOOL_OPTIONS environment variable.

screenshot showing use of JAVA_TOOL_OPTIONS environment variable

Spring初心 2024-12-10 21:16:48

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

If the required properties need to set in system then there is no option than -D
But if you need those properties while bootstrapping an application then loading properties through the properties files is a best option. It will not require to change build for a single property.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文