EclipseJDT编译器(ECJ)在Java1.7中抛出NPE

EclipseJDT编译器(ECJ)在Java1.7中抛出NPE,java,compiler-construction,nullpointerexception,java-7,eclipse-jdt,Java,Compiler Construction,Nullpointerexception,Java 7,Eclipse Jdt,在JRE 1.7中运行时,我从ECJ(版本4.2.1)编译器获得了一个NPE。同一个项目在JRE 1.6上正确编译 一个CompilationProgress监视器显示总共有2493个任务,但是我得到了NPE 有什么想法吗 短暂性脑缺血发作 看起来异常是在命令行args处理内部引起的。特别是在-extdirs选项上。locations对象为空,唯一的方法是在EclipseFileManager上调用了close()方法。我看不出确切的原因,但我建议您获取源代码并在调试器中启动它 我知道这不是一个

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

一个
CompilationProgress
监视器显示总共有2493个任务,但是我得到了NPE

有什么想法吗

短暂性脑缺血发作


看起来异常是在命令行args处理内部引起的。特别是在
-extdirs
选项上。
locations
对象为空,唯一的方法是在
EclipseFileManager
上调用了
close()
方法。我看不出确切的原因,但我建议您获取源代码并在调试器中启动它


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

我随机猜测,你遇到了一个我在ECJ中遇到的Windows问题,命令行太长,Windows无法处理

对我来说,解决这个问题的方法是将类路径单独放在一个文本文件中,并将其传递给ECJ,但您应该能够将所有选项添加到一个文本文件中,并将其传递给ECJ,这将更安全(请参阅“高级选项”)@,类似于:

  • 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]-df:/Workspace/railo build/railo-4.0.5.001-patch-d/uu 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/\uu railo-core-src

原来是一个Eclipse JDT错误:


希望它能在下一个版本中得到修复。

您能提供一段代码来复制它吗?@AndrewEisenberg--谢谢您的回复。以下命令导致此问题。同样,这在JRE6中工作正常。编译器命令:-g-1.6-extdirs“F:/Workspace/git/igal-getrailo/railo-java/libs;C:\Apps\railo-builder\webapps\railo-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//uuu-railo-core-bin F:/Workspace/railo-build/railo-4.0.5.001-patch-d//uuu-railo-core-src这是通过railo(Servlet)的反射处理的,执行它的代码位于:我在此感谢您的帮助,并将按照您的建议在调试器中进行测试。有没有想过为什么这在JRE6中有效而在JRE7中无效?我唯一能想到的是Java 6和Java 7处理extdir和注释处理的方式不同,但这只是一个猜测。谢谢Denny,但情况似乎并非如此。我可以看到所有的参数都被正确地传递了。问题似乎出现在第573行的
org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager中,该行(对于注释\u处理器\u路径)在JRE6中工作,但在JRE7中返回null——请参见错误:location.getName()的值在该点为“PLATFORM\u CLASS\u PATH”。我断定这是一个bug,并将其归档在-,谢谢你的帮助。
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)