我正在调试大型系统中的问题。我能够在一个相当基本的Java功能中找到问题-应用程序使用-D选项启动以指定一些系统属性。但是,在运行时,不会设置所述属性,并且它们的值为null。
为了重现该问题,我创建了以下非常简单的应用程序:

  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 =“某个值”
sysprop = null

显然我缺少明显的东西(或缺乏一些基本知识),但这是什么?
谢谢。

最佳答案

您在类名之后指定-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
[...]

10-04 17:36