4

I am debugging a problem in a large system. I was able to locate the problem in a rather basic java feature - the application is started with the -D option to specify some system properties. During run-time though, said properties are not set and their values are null.

Trying to reproduce the issue I created the following very simple application:

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

I start the application with the following command line and to my surprise got the same result:

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

sysprop=null

Apparently I am missing something obvious (or lack some basic knowledge) but what is it?

Thank you.

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 に答える