0

在JRE 1.7中運行時,我從ECJ(版本4.2.1)編譯器中獲得NPE,同一項目在JRE 1.6上正確編譯。Eclipse JDT編譯器(ECJ)在Java 1.7中拋出NPE

A 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) 
+0

你能包含一段代碼來重現這個嗎? – 2013-04-08 15:20:29

+0

@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 \編譯「-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 F:/Workspace/railo-build/railo-4.0.5.001-patch-d/__ railo-core-src – isapir 2013-04-08 17:01:25

+0

這是通過反射從一個Railo(Servlet)處理的,執行它的代碼位於: https://github.com/igal-getrailo/railo-builder/blob/1.1/resources/railo-builder/cfc/BuilderUtils.cfc#L14 – isapir 2013-04-08 17:03:21

回答

1

貌似異常正在命令行參數的處理的內部引起的。具體在-extdirs選項。 locations對象爲空,唯一的方法是如果已在EclipseFileManager上調用close()方法。我看不出爲什麼,但我建議你抓住源代碼並在調試器中啓動它。

我知道這不是一個真正的答案,但希望這可以至少讓你更接近解決問題。

+0

我很感謝你的幫助,並會按照你的建議在調試器中進行測試。任何想法爲什麼這可以在JRE6而不是在JRE7中工作? – isapir 2013-04-08 19:05:59

+0

我唯一能想到的是Java 6和Java 7處理extdirs和註釋處理的方式不同,但這只是一個猜測。 – 2013-04-08 19:42:40

1

我在隨機猜測你已經遇到了一個與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\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到指定參數時,是這樣的:

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

+0

感謝Denny,但看起來情況並非如此。我可以看到所有參數都正確傳遞。這個問題似乎在'org.eclipse.jdt.internal.compiler.apt.util。EclipseFileManager'在第573行(對於ANNOTATION_PROCESSOR_PATH)在JRE6中工作,但在JRE7中返回null - 請參閱http://grepcode.com/file/repository.springsource.com/org.eclipse.jdt/com.springsource.org.eclipse .jdt.core.compiler.batch/3.6.1/org/eclipse/jdt/internal/compiler/apt/util/EclipseFileManager.java#571 – isapir 2013-04-09 01:08:43

+0

err:location.getName()的值是「PLATFORM_CLASS_PATH」 。我已經得出結論,這是一個錯誤,並提交到https://bugs.eclipse.org/bugs/show_bug.cgi?id=405225 - 感謝您的幫助。 – isapir 2013-04-09 01:38:22