将 Elemental 添加到 GWT
Posted
技术标签:
【中文标题】将 Elemental 添加到 GWT【英文标题】:Adding Elemental to GWT 【发布时间】:2013-07-02 14:28:00 【问题描述】:我有一个 GWT maven 多模块项目。 mvn gwt:run
运行良好 - 但是当我将 <inherits name='elemental.Elemental'/>
添加到 gwt.xml 文件时,我收到以下错误。
关键点似乎是 JSNI 在遍历时中断?
Caused by: java.lang.IndexOutOfBoundsException: Index: 13, Size: 13
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.google.gwt.dev.shell.CompilingClassLoader$DispatchClassInfoOracle.getClassInfoByDispId(CompilingClassLoader.java:120)
at com.google.gwt.dev.shell.CompilingClassLoader.getClassInfoByDispId(CompilingClassLoader.java:1014)
at com.google.gwt.dev.shell.Jsni$JsSourceGenWithJsniIdentFixup.visit(Jsni.java:177)
我尝试调试它,但我似乎无法找到任何东西。有什么想法吗?
00:00:19.630 [错误] 无法加载模块入口点类 com.rc.gloopsh.admin.AdminEntryPoint(请参阅相关的异常 详细信息)com.google.gwt.dev.jjs.InternalCompilerException:意外 访问时出错。在 com.google.gwt.dev.js.ast.JsVisitor.translateException(JsVisitor.java:483) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:470) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.js.JsToStringGenerationVisitor.visit(JsToStringGenerationVisitor.java:893) 在 com.google.gwt.dev.js.ast.JsReturn.traverse(JsReturn.java:49) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:468) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.js.JsToStringGenerationVisitor.printJsBlock(JsToStringGenerationVisitor.java:1032) 在 com.google.gwt.dev.js.JsSourceGenerationVisitor.visit(JsSourceGenerationVisitor.java:59) 在 com.google.gwt.dev.js.ast.JsBlock.traverse(JsBlock.java:47) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:468) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.shell.Jsni.generatejavascriptForHostedMode(Jsni.java:253) 在 com.google.gwt.dev.shell.Jsni.getJavaScriptForHostedMode(Jsni.java:241) 在 com.google.gwt.dev.shell.ModuleSpaceOOPHM.createNativeMethods(ModuleSpaceOOPHM.java:52) 在 com.google.gwt.dev.shell.CompilingClassLoader.injectJsniMethods(CompilingClassLoader.java:1380) 在 com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1151) 在 com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1196) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:356) 在 com.google.gwt.user.client.DOM.appendChild(DOM.java:66) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:191) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:90) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:181) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:140) 在 com.rc.gloopsh.resources.GloopshNav.addNav(GloopshNav.java:34) 在 com.rc.gloopsh.admin.AdminEntryPoint.onModuleLoad(AdminEntryPoint.java:29) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406) 在 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526) 在 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) 在 java.lang.Thread.run(Thread.java:722) 引起: java.lang.IndexOutOfBoundsException:索引:13,大小:13 java.util.ArrayList.rangeCheck(ArrayList.java:604) 在 java.util.ArrayList.get(ArrayList.java:382) 在 com.google.gwt.dev.shell.CompilingClassLoader$DispatchClassInfoOracle.getClassInfoByDispId(CompilingClassLoader.java:120) 在 com.google.gwt.dev.shell.CompilingClassLoader.getClassInfoByDispId(CompilingClassLoader.java:1014) 在 com.google.gwt.dev.shell.Jsni$JsSourceGenWithJsniIdentFixup.visit(Jsni.java:177) 在 com.google.gwt.dev.js.ast.JsInvocation.traverse(JsInvocation.java:69) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:468) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.js.JsToStringGenerationVisitor.visit(JsToStringGenerationVisitor.java:893) 在 com.google.gwt.dev.js.ast.JsReturn.traverse(JsReturn.java:49) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:468) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.js.JsToStringGenerationVisitor.printJsBlock(JsToStringGenerationVisitor.java:1032) 在 com.google.gwt.dev.js.JsSourceGenerationVisitor.visit(JsSourceGenerationVisitor.java:59) 在 com.google.gwt.dev.js.ast.JsBlock.traverse(JsBlock.java:47) 在 com.google.gwt.dev.js.ast.JsVisitor.doTraverse(JsVisitor.java:468) 在 com.google.gwt.dev.js.ast.JsVisitor.doAccept(JsVisitor.java:445) 在 com.google.gwt.dev.js.ast.JsVisitor.accept(JsVisitor.java:109) 在 com.google.gwt.dev.shell.Jsni.generateJavaScriptForHostedMode(Jsni.java:253) 在 com.google.gwt.dev.shell.Jsni.getJavaScriptForHostedMode(Jsni.java:241) 在 com.google.gwt.dev.shell.ModuleSpaceOOPHM.createNativeMethods(ModuleSpaceOOPHM.java:52) 在 com.google.gwt.dev.shell.CompilingClassLoader.injectJsniMethods(CompilingClassLoader.java:1380) 在 com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1151) 在 com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1196) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:356) 在 com.google.gwt.user.client.DOM.appendChild(DOM.java:66) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:191) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:90) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:181) 在 com.google.gwt.user.client.ui.Hyperlink.(Hyperlink.java:140) 在 com.rc.gloopsh.resources.GloopshNav.addNav(GloopshNav.java:34) 在 com.rc.gloopsh.admin.AdminEntryPoint.onModuleLoad(AdminEntryPoint.java:29) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:601) 在 com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:406) 在 com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200) 在 com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526) 在 com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) 在 java.lang.Thread.run(Thread.java:722)
【问题讨论】:
【参考方案1】:这是known issue;现在,如果您使用 Elemental,则必须使用 SuperDevMode。
【讨论】:
【参考方案2】:似乎elemental.Elemental
中有一些东西不能被 GWTJS 编译器编译。由于Elemental is experimental 可能会发生这样的事情......
【讨论】:
SVN 已过时,GWT 已移至 Git,地址为 gwt.googlesource.com/gwt;也就是说,Element 仍然是实验性的,但这个特定问题是由于 DevMode 而不是 Elemental。以上是关于将 Elemental 添加到 GWT的主要内容,如果未能解决你的问题,请参考以下文章