我正在调试大型系统中的问题。我能够在一个相当基本的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 =“some value”
sysprop =空
显然我缺少一些明显的东西(或缺乏一些基本知识),但它是什么?
谢谢。
答案 0 :(得分:7)
您在类名后指定-D
,因此它被视为常规命令行参数,以传递给应用程序本身。如果您在args
打印出值,则会看到。
改为运行这样的应用程序:
java -cp javaapplication8.jar -Dsysprop="some value" javaapplication8.JavaApplication8
所有适用于环境而不是应用程序的参数应该在classname之前。如果你只运行java
,你会看到这样的使用帮助:
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include
[...]