4

我正在调试大型系统中的问题。我能够在一个相当基本的 java 功能中找到问题 - 应用程序以 -D 选项启动以指定一些系统属性。但是,在运行时,未设置所述属性并且它们的值为空。

试图重现该问题,我创建了以下非常简单的应用程序:

  public static void main(String[] args) {
    String propName = "sysprop";
    String propValue = System.getProperty(propName);
    System.out.println(propName + "=" + propValue);
  }

我使用以下命令行启动应用程序,令我惊讶的是得到了相同的结果:

java -cp javaapplication8.jar javaapplication8.JavaApplication8 -Dsysprop="一些值"

系统属性=空

显然我遗漏了一些明显的东西(或缺乏一些基本知识),但它是什么?

谢谢你。

4

1 回答 1

8

您在类名-D 之后指定,因此它被视为常规命令行参数以传递给应用程序本身。如果您打印出args.

像这样运行应用程序:

java -cp javaapplication8.jar -Dsysprop="some value" javaapplication8.JavaApplication8 

所有适用于环境而不是应用程序的参数都应该在类名之前。如果你只运行java,你会看到这样的使用帮助:

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include
[...]
于 2012-11-21T15:16:04.950 回答