GWT编译错误

3

在编译过程中,可能会出现堆栈错误,请问可能是什么原因呢?我正在使用 Eclipse 3.7 和 GWT 2+。

[错误] 意外的内部编译器错误 `java.lang.ArrayIndexOutOfBoundsException: 986507` 在 `com.google.gwt.dev.asm.ClassReader.readUnsignedShort(ClassReader.java:1850)` 处。在 `com.google.gwt.dev.asm.ClassReader.accept(ClassReader.java:484)` 和 `com.google.gwt.dev.asm.ClassReader.accept(ClassReader.java:420)` 处。在 `com.google.gwt.dev.javac.TypeOracleMediator$TypeData.getCollectClassData(TypeOracleMediator.java:147)` 处获取收集类数据。在 `com.google.gwt.dev.javac.TypeOracleMediator.addNewTypes(TypeOracleMediator.java:390)` 处添加新类型。在 `com.google.gwt.dev.javac.TypeOracleMediatorFromSource.addNewUnits(TypeOracleMediatorFromSource.java:52)` 处添加新单元。在 `com.google.gwt.dev.javac.CompilationState.assimilateUnits(CompilationState.java:164)` 处同化单元。在 `com.google.gwt.dev.javac.CompilationState.(CompilationState.java:82)` 处。在 `com.google.gwt.dev.javac.CompilationStateBuilder.doBuildFrom(CompilationStateBuilder.java:450)` 和 `com.google.gwt.dev.javac.CompilationStateBuilder.buildFrom(CompilationStateBuilder.java:370)` 处构建编译状态。在 `com.google.gwt.dev.cfg.ModuleDef.getCompilationState(ModuleDef.java:360)` 处获取编译状态。在 `com.google.gwt.dev.Precompile.precompile(Precompile.java:252)`、`com.google.gwt.dev.Precompile.precompile(Precompile.java:233)` 和 `com.google.gwt.dev.Precompile.precompile(Precompile.java:145)` 处预编译。在 `com.google.gwt.dev.Compiler.run(Compiler.java:232)`、`com.google.gwt.dev.Compiler.run(Compiler.java:198)` 和 `com.google.gwt.dev.Compiler$1.run(Compiler.java:170)` 处运行编译器。在 `com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:88)` 和 `com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:82)` 处运行任务。在 `com.google.gwt.dev.Compiler.main(Compiler.java:177)` 处。关闭持久单元缓存线程。在 "UnitWriteThread" 线程中的异常:`java.lang.NullPointerException` 在 `com.google.gwt.dev.util.DiskCache.transferToStream(DiskCache.java:183)` 处。在 `com.google.gwt.dev.javac.CompiledClass.writeObject(CompiledClass.java:163)` 处写入对象。在 `sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)`、`sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)` 和 `java.lang.reflect.Method.invoke(Unknown Source)` 处。在 `java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)` 处调用 `writeObject` 方法。在 `java.io.ObjectOutputStream.writeSerialData(Unknown Source)` 和 `java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)` 处写入序列化数据和普通对象。在 `java.io.ObjectOutputStream.writeObject0(Unknown Source)` 和 `java.io.ObjectOutputStream.writeArray(Unknown Source)` 处写入对象和数组。在 `java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)` 和 `java.io.ObjectOutputStream.writeObject(Unknown Source)` 处写入默认字段和对象。在 `com.google.gwt.dev.javac.PersistentUnitCache$UnitWriter.run(PersistentUnitCache.java:226)` 处运行单元写入。
4个回答

0

我在使用eclipse luna + GWT 2.7.0 + Java 1.7 + Maven插件3.1.1时遇到了一个非常相似的问题。

我尝试使用super dev-mode编译GWT,但总是出现java.lang.ArrayIndexOutOfBoundsException错误。

我认为这是因为编译器试图编译一些本不应该编译的类(比如测试类),但我不确定。

我解决这个问题的步骤如下:

  1. 清理目标文件夹
  2. 从部署配置中删除测试文件夹(在eclipse中右键点击项目 -> "Deployment Assembly" -> 选择测试文件夹并点击"Remove"
  3. 使用GWT插件进行编译:在eclipse中选择项目 -> 点击"GDT Pulldown"按钮(如果已安装Google插件) -> "GWT Compile Project" -> 选择要编译的模块并点击"Compile"。

最后一步对我来说实际上失败了,所以我不确定是否有帮助。

最后,我再次编译,错误消失了。

希望对某人有所帮助。


0

没有你的代码很难确定,调试时看看这个错误具体来自哪里,我猜你有一个数组,并且正在尝试从该数组访问实际不存在的索引。


0

这明显是编译器错误。 查看汇编代码 - 数组变量越界的位置为: 非标准类需进行解析。此字段用于属性子类,通常不被类生成器或适配器所需要。

您是否有不匹配的 bin/lib JAR 或可执行文件? 您能否将问题代码定位到匿名类或内部类中吗?


0

尝试删除gwt-unitCache文件夹,然后再次运行gwt-compile。这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接