下面是我的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);
}
答案 0 :(得分:0)
我猜com.sun.tools.javac.Main.compile
最终通过调用外部Process
来结束。
使用shell中的命令行参数时,需要指定它的起始位置和结束位置。它是用空格完成的。这就是为什么你需要引用包含空格的所有参数。但是当从Java开始一个进程时,每个参数都在相应的数组中有自己的位置,因此不需要引号。
在大多数情况下,如果引用一个参数,引号将被视为参数的PART,而不是封闭的字符,因此,在您的情况下,编译器将搜索以"
开头的文件,是不正确的。
我不确定为什么在某些系统中它会接受引号,因为它总是会失败......