gwt - GWT:如何从 gwt 2.7.0 迁移到 gwt 2.8.2
问题描述
我在 gwt 2.7.0 上遇到了这个问题:Datepicker 没有锚定到 Chrome 中的 DateBox。我尝试升级到 gwt 2.8.2,但是当我尝试编译代码时出现此异常:
[ERROR] An internal compiler exception occurred
[INFO] com.google.gwt.dev.jjs.InternalCompilerException: Unexpected error during visit.
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.translateException(JVisitor.java:111)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:276)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)
[INFO] at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:76)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)
[INFO] at com.google.gwt.dev.jjs.ast.JCastOperation.traverse(JCastOperation.java:76)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.acceptImmutable(JModVisitor.java:305)
[INFO] at com.google.gwt.dev.jjs.ast.JMethodCall.visitChildren(JMethodCall.java:275)
[INFO] at com.google.gwt.dev.jjs.ast.JMethodCall.traverse(JMethodCall.java:266)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:118)
[INFO] at com.google.gwt.dev.jjs.ast.JExpressionStatement.traverse(JExpressionStatement.java:42)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor$ListContext.traverse(JModVisitor.java:88)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemove(JModVisitor.java:331)
[INFO] at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:94)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:139)
[INFO] at com.google.gwt.dev.jjs.ast.JIfStatement.traverse(JIfStatement.java:53)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor$ListContext.traverse(JModVisitor.java:88)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.acceptWithInsertRemove(JModVisitor.java:331)
[INFO] at com.google.gwt.dev.jjs.ast.JBlock.traverse(JBlock.java:94)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:139)
[INFO] at com.google.gwt.dev.jjs.ast.JVisitor.accept(JVisitor.java:135)
[INFO] at com.google.gwt.dev.jjs.ast.JMethodBody.traverse(JMethodBody.java:83)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO] at com.google.gwt.dev.jjs.ast.JMethod.visitChildren(JMethod.java:786)
[INFO] at com.google.gwt.dev.jjs.ast.JMethod.traverse(JMethod.java:778)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.traverse(JModVisitor.java:361)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:265)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst.mainLoop(UnifyAst.java:1401)
[INFO] at com.google.gwt.dev.jjs.impl.UnifyAst.exec(UnifyAst.java:896)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.unifyJavaAst(JavaToJavaScriptCompiler.java:1410)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.constructJavaAst(JavaToJavaScriptCompiler.java:1222)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:1140)
[INFO] at
com.google.gwt.dev.jjs.JavaToJavaScriptCompiler.precompile(JavaToJavaScriptCompiler.java:255)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:255)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:202)
[INFO] at com.google.gwt.dev.Precompile.precompile(Precompile.java:143)
[INFO] at com.google.gwt.dev.Compiler.compile(Compiler.java:204)
[INFO] at com.google.gwt.dev.Compiler.compile(Compiler.java:155)
[INFO] at com.google.gwt.dev.Compiler.compile(Compiler.java:144)
[INFO] at com.google.gwt.dev.Compiler$1.run(Compiler.java:118)
[INFO] at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55)
[INFO] at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50)
[INFO] at com.google.gwt.dev.Compiler.main(Compiler.java:125)
[INFO] Caused by: java.lang.NoSuchMethodError:
com.google.gwt.core.ext.typeinfo.JClassType.getMetaDataTags()[Ljava/lang/String;
[INFO] at org.googlecode.gwt.rebind.menu.ClassMenuGenerator.elabClass(ClassMenuGenerator.java:237)
[INFO] at org.googlecode.gwt.rebind.menu.ClassMenuGenerator.create(ClassMenuGenerator.java:204)
[INFO] at org.googlecode.gwt.rebind.menu.MenuGenerator.generate(MenuGenerator.java:14)
[INFO] at
com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally(IncrementalGenerator.java:40)
[INFO] at com.google.gwt.dev.cfg.RuleGenerateWith.realize(RuleGenerateWith.java:103)
[INFO] at
com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:78)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:262)
[INFO] at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:251)
[INFO] at com.google.gwt.dev.jjs.ast.JModVisitor.accept(JModVisitor.java:273)
[INFO] ... 56 more
[INFO] [ERROR] at Cdn.java(343): GWT.create(CdnMenu.class)
[INFO] com.google.gwt.dev.jjs.ast.JMethodCall
[INFO] [ERROR] at Cdn.java(343): (SMenu) GWT.create(CdnMenu.class)
[INFO] com.google.gwt.dev.jjs.ast.JCastOperation
[INFO] [ERROR] at Cdn.java(343): (SMenu) (SMenu) GWT.create(CdnMenu.class)
[INFO] com.google.gwt.dev.jjs.ast.JCastOperation
[INFO] [ERROR] at Cdn.java(343): TemplateManager.setMenu((SMenu) (SMenu)
GWT.create(CdnMenu.class))
[INFO] com.google.gwt.dev.jjs.ast.JMethodCall
[INFO] [ERROR] at Cdn.java(343): TemplateManager.setMenu((SMenu) (SMenu)
GWT.create(CdnMenu.class))
[INFO] com.google.gwt.dev.jjs.ast.JExpressionStatement
[INFO] [ERROR] at Cdn.java(165):
这是出错的行之一:
TemplateManager.setMenu((SMenu) GWT.create(CdnMenu.class));
有任何想法吗?在此先感谢斯特凡诺
解决方案
[INFO] Caused by: java.lang.NoSuchMethodError:
com.google.gwt.core.ext.typeinfo.JClassType.getMetaDataTags()[Ljava/lang/String;
[INFO] at org.googlecode.gwt.rebind.menu.ClassMenuGenerator.elabClass(ClassMenuGenerator.java:237)
[INFO] at org.googlecode.gwt.rebind.menu.ClassMenuGenerator.create(ClassMenuGenerator.java:204)
[INFO] at org.googlecode.gwt.rebind.menu.MenuGenerator.generate(MenuGenerator.java:14)
看起来您的项目有一些正在使用的 MenuGenerator,它正在调用 JClassType.getMetaDataTags,该方法似乎不再存在。此方法存在于一个接口上,该接口于 2014 年HasMetadata
被删除,但在 12 年前的 2009 年被弃用- 到那时它不再起作用(根据提交消息)。
在网上搜索 ClassMenuGenerator 的完整类名(和包结构)表明它是该项目的一部分,该项目以前托管在 Google Code 上,在该服务关闭时存档:Productive GWT。那些项目可以迁移到 github,但我只发现发生了一个这样的迁移,即使在那个副本中,这个问题也没有得到修复——fork 可能没有维护。
好消息是修复它应该很容易,因为如上所述,元数据功能自 2009 年以来实际上没有做任何事情,因此您可能只需 fork 并删除调用这些元数据方法的代码。针对最新版本的 GWT 编译项目还可以更容易地确定是否还有其他潜伏的问题也可能导致问题。
推荐阅读
- java - 谷歌分析事件实时出现,而不是在报告中
- ios - 无法在 Swift 中的自定义 UIView 上布置子视图
- .net - 序列化列表(长)
- java - 使用 faceId/touchId 的应用程序的安全性?它是如何工作的?
- javascript - 共享 Typescript 接口的导出默认值
- c# - 在相同的名称空间 C# ASP.NET 下无法访问这些类
- python - 重用之前在 Keras 中训练的类似网络的层权重
- python - 如何修复“ImportError:无法导入名称 label_map_util”
- r - 正则表达式按顺序排列两位数字
- r - 从列表中减去元素的方法