2

GWT アプリを開発モードで開くと、次の例外が発生します。mvn gwt:compile を使用して、まったく同じコードを正常にコンパイルできます

原因: java.lang.ArrayIndexOutOfBoundsException: 3667 at com.google.gwt.dev.asm.ClassReader.readClass(ClassReader.java:1976) at com.google.gwt.dev.asm.ClassReader.accept(ClassReader.java: 464) com.google.gwt.dev.asm.ClassReader.accept(ClassReader.java:420) で com.google.gwt.dev.shell.rewrite.HasAnnotation.hasAnnotation(HasAnnotation.java:45) で com.google .gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1100) で com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1203) で java.lang.ClassLoader.loadClass(ClassLoader.java) :247) で java.lang.Class.forName0(ネイティブ メソッド) で java.lang.Class.forName(Class.java:247) で com.google.gwt.dev.shell.ModuleSpace.loadClassFromSourceName(ModuleSpace.java:665) ) com.google.gwt.dev.shell.ModuleSpace で。rebindAndCreate(ModuleSpace.java:468) at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49) at com.google.gwt.core.shared.GWT.create(GWT.java:57) com.google.gwt.core.client.GWT.create(GWT.java:85) で ...

ModuleSpace.java を上書きし、665 行目の Class.forName() の前にクラス名を出力しました。これは、生成された GinjectorImpl.java をロードしようとしていることを示しています。

生成された GinjectorImpl.java は約 9MB で、10 万行以上のコードがあることがわかりました。

GWT アプリからいくつかのモジュールをランダムに削除すると、再び機能するので、ASM がコンパイルするには大きすぎると推測しています。

助言がありますか?ありがとう

環境: GWT 2.5.0、GIN 1.5.0、gwt-maven-plugin 2.5.0、Java 6 SE

4

2 に答える 2

1

GINを2.0.0にアップグレードすると問題が解決しました

生成された Ginjector.java のサイズが 110K+ 行から 23 行に縮小:)

于 2012-12-07T05:00:18.810 に答える