Eclipse 的 Java 编译器的一个鲜为人知的功能是您可以从命令行运行它。
这效果很好(在修补 plexus-compiler 以使用最新版本之后)。
我的问题:当我从命令行编译代码时,堆栈跟踪是不同的。例如,当我在 IDE 中运行编译器时,我得到以下输出:
at com.some.Foo.method(Foo.java:312)
但是当我从命令行编译代码时,我得到了这个:
at com.some.Foo.method(com.some.Foo:312)
^^^^^^^^^^^^
这里发生了什么???
使用
javap
分析类文件给出:
SourceFile: "Foo.java"
和
SourceFile: "com.some.Foo"
有什么想法可能会导致这种情况吗?
$ cat baz/Bar.java
class Foo {
}
$ java -jar eclipse/plugins/org.eclipse.jdt.core_3.8.0.v_C19.jar baz/Bar.java
$ javap -c baz/Foo.class
Compiled from "Bar.java"
...
这很有趣,它可以在我的机器上运行?
Win7、Java 7、Eclipse 3.8.0(将自己标识为 Indigo,20110615-0604)。
这似乎已在 plexus-compiler-eclipse 版本 1.9.1 中修复(或者可能是 1.9.1 和 1.7 之间的其他版本)
我正在使用修补过的
plexus-compiler-eclipse
(我修补了 POM 以包含 3.7/Helios 编译器)。
在类
EclipseJavaCompiler.CompilationUnit
中,有这样的代码:
public char[] getFileName()
{
return className.toCharArray();
}
应该是
public char[] getFileName()
{
return sourceFile.toCharArray();
}