在 JRE 1.7 中运行时,我从 ECJ(版本 4.2.1)编译器获得 NPE,同一项目在 JRE 1.6 上正确编译。
CompilationProgress
监视器显示总共有 2493 个任务,但随后我得到了 NPE。
有什么想法吗?
蒂亚
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)
看起来异常是在命令行参数处理内部引起的。 特别是关于
-extdirs
选项。 locations
对象为 null,唯一的方法是如果已经在 close()
上调用了 EclipseFileManager
方法。 我不明白为什么,但我建议您获取源代码并在调试器中启动它。
我知道这并不是真正的答案,但希望这至少能让您更接近解决问题。
我随机猜测您遇到了我在使用 ECJ 时遇到的一个 Windows 问题,即命令行太长,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\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/__railo-core-bin
然后将 @ecj-options.txt 添加到参数中,例如:
java -jar ecj.jar @ecj-options.txt F:/Workspace/railo-build/railo-4.0.5.001-patch-d/__railo-core-src
结果是一个 Eclipse JDT bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=405225
希望下个版本能修复。