Eclipse JDT Compiler(ECJ)在Java 1.7中引发NPE

时间:2013-04-04 19:22:32

标签: java compiler-construction nullpointerexception java-7 eclipse-jdt

我在JRE 1.7中运行时从ECJ(版本4.2.1)编译器获得NPE,同一项目在JRE 1.6上正确编译。

CompilationProgress监视器显示总共有2493个任务,但后来我获得了NPE。

有什么想法吗?

TIA

java.lang.NullPointerException
    at org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager.concatFiles(EclipseFileManager.java:202)
    at org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager.handleOption(EclipseFileManager.java:669)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BatchProcessingEnvImpl.(BatchProcessingEnvImpl.java:88)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager.configure(BatchAnnotationProcessorManager.java:69)
    at org.eclipse.jdt.internal.compiler.batch.Main.initializeAnnotationProcessorManager(Main.java:3632)
    at org.eclipse.jdt.internal.compiler.batch.Main.performCompilation(Main.java:3737)
    at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1679)
    at org.eclipse.jdt.internal.compiler.batch.Main.compile(Main.java:1372)
    at org.eclipse.jdt.core.compiler.batch.BatchCompiler.compile(BatchCompiler.java:80)
    at org.eclipse.jdt.core.compiler.batch.BatchCompiler.compile(BatchCompiler.java:52)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
...
    at java.lang.Thread.run(Thread.java:722)

3 个答案:

答案 0 :(得分:1)

看起来在命令行args处理中引起了异常。特别是-extdirs选项。 locations对象为null,唯一的方法是在close()上调用EclipseFileManager方法。我无法确切地知道原因,但我建议你抓住源代码并在调试器中启动它。

我知道这不是一个真正的答案,但希望这至少可以让你更接近解决问题。

答案 1 :(得分:1)

我随机猜测你遇到了一个Windows问题,我曾经遇到过ECJ,其命令行太长,Windows无法处理。

为我修复的是将类路径单独放在文本文件中并将其传递给ECJ,但是您应该能够将所有选项添加到文本文件中并传递它,这将是更长期更安全的(请参阅“高级选项”@ http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask-using_batch_compiler.htm),类似于:

  • ECJ-options.txt

    -g -1.6 -extdirs "F:/Workspace/git/igal-getrailo/railo-java/libs;C:\Apps\railo-builder\webapps\ra‌​ilo-builder\WEB-INF\railo\lib\compile" -sourcepath F:/Workspace/git/igal-getrailo/railo-java/railo-loader/src[-d none] -d F:/Workspace/railo-build/railo-4.0.5.001-patch-d/__railo-core-bin

然后将@ ecj-options.txt添加到args中,例如:

java -jar ecj.jar @ecj-options.txt F:/Workspace/railo-build/railo-4.0.5.001-patch-d/__railo-core-src

答案 2 :(得分:0)

原来是一个Eclipse JDT错误: https://bugs.eclipse.org/bugs/show_bug.cgi?id=405225

希望它将在下一个版本中修复。