导致NoClassDefFoundError的Java系统参数

时间:2013-07-01 13:16:40

标签: java unix

我有一个类,它接收各种系统参数并打印出来:

public class Test_Class {
    public static void main(String[] args){
        String fooA = System.getProperty("fooA");
        String fooB = System.getProperty("fooB");
        String fooC = System.getProperty("fooC");

        System.out.println("System Properties:\n"+fooA+"\n"+foob+"\n"+fooC+"\n");
    }
}

然后,使用IntelliJ,传递VM参数:

-DfooA="StringA" -DfooB="StringB" -DfooC="String C"

运行我的程序后,我得到以下输出:

System Properties:
StringA
StringB
String C

现在,如果我通过运行以下命令在UNIX服务器上运行相同的程序:

java -DfooA="StringA" -DfooB="StringB" -DfooC="String C" com.foo.fooUtil.Test_Class

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: C

我尝试了一些不同的方法来传递fooC,例如-DfooC=\"String C\"-DfooC='String C'-DfooC=\'String C\',基本上是我想到的任何想法。我做了一些研究,但一直找不到任何可靠的解决方案。

作为参考,我在网上找到了以下链接,其他人似乎有同样的问题,但不幸的是,没有一个建议有效。

http://www.unix.com/shell-programming-scripting/157761-issue-spaces-java-command-line-options.html

如何在UNIX中传入带空格的系统参数?谢谢。

1 个答案:

答案 0 :(得分:1)

这是我的方法:为什么不使用.properties文件来存储系统属性而不是通过命令行传递它们?您可以使用以下方式访问属性:

Properties properties = new Properties();
try {
  properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
  ...
}

你可以迭代为:

for(String key : properties.stringPropertyNames()) {
  String value = properties.getProperty(key);
  System.out.println(key + " => " + value);
}

希望有所帮助!!!