java类路径问题

时间:2013-11-20 09:39:58

标签: java linux classpath

下面是我的Java代码,并试图编译一个文件。我有两个linux设置。

如果我使用第1行和注释第2行,程序将无法设置类路径。唯一的区别是引号。

我发现这是机器特定的。在某些机器上,带引号的类路径工作正常。

我正在使用Java 1.6更新24.任何指针?

我认为引用是针对空格的,代码应该使用引号。

    //String clspath = '"' + this.getClassPath() + '"';  // 1 line
    //String clspath = this.getClassPath();   // 2 line

    String[] compArgs = new String[] {
                    "-classpath", clspath,
                    "-g",
                    "-d", ruleCompDirName,
                    realclassNameFull};
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    PrintWriter pw = new PrintWriter(out, true);
    int compileStatus = com.sun.tools.javac.Main.compile(compArgs, pw);

    // Print compiler output
    if (_logger.isDebugEnabled()) {
        String compOutput = new String(out.toByteArray());
        _logger.debug(compOutput);
    }

1 个答案:

答案 0 :(得分:0)

我猜com.sun.tools.javac.Main.compile最终通过调用外部Process来结束。

使用shell中的命令行参数时,需要指定它的起始位置和结束位置。它是用空格完成的。这就是为什么你需要引用包含空格的所有参数。但是当从Java开始一个进程时,每个参数都在相应的数组中有自己的位置,因此不需要引号。

在大多数情况下,如果引用一个参数,引号将被视为参数的PART,而不是封闭的字符,因此,在您的情况下,编译器将搜索以"开头的文件,是不正确的。

我不确定为什么在某些系统中它会接受引号,因为它总是会失败......