有三个朋友,我正在使用gwt(2.6)开发一个应用程序。几周前,我们开始使用超级开发模式。一切都很好,除了我们两个人不能使用ImageBundles。它开始时我想要包含一个SuggestBox,它显然加载了一些图像。 GWT编译失败。我google了很多,我无法解决它,所以我开始研究其他东西:使用ImageResourceBundle加载一些图像。 GWT编译失败。同样的错误。解决方法:不使用ImageResourceBundle加载图像。真奇怪的是:我们两个人正在使用Windows,一个使用ubuntu,而我正在使用mac。编译在ubuntu和其中一台Windows机器上运行良好。在其他机器上,无论我们尝试什么,编译错误总是保持不变:
Compile with -strict or with -logLevel set to TRACE or DEBUG to see all errors.
Computing all possible rebind results for 'com.google.gwt.user.client.ui.MenuBar.Resources'
Rebinding com.google.gwt.user.client.ui.MenuBar.Resources
Invoking generator com.google.gwt.resources.rebind.context.InlineClientBundleGenerator
[ERROR] No @com.google.gwt.resources.ext.ResourceGeneratorType was specifed for type com.google.gwt.resources.client.ImageResource or its supertypes
[ERROR] Errors in 'com/google/gwt/user/client/ui/MenuBar.java'
[ERROR] Line 212: Failed to resolve 'com.google.gwt.user.client.ui.MenuBar.Resources' via deferred binding
Computing all possible rebind results for 'com.google.gwt.user.client.ui.impl.ClippedImageImpl.Template'
Rebinding com.google.gwt.user.client.ui.impl.ClippedImageImpl.Template
Invoking generator com.google.gwt.safehtml.rebind.SafeHtmlTemplatesGenerator
Constructing interface com.google.gwt.user.client.ui.impl.ClippedImageImpl.Template
Generating method body for image()
[ERROR] Required annotation @Template not present on interface method public abstract com.google.gwt.safehtml.shared.SafeHtml image(com.google.gwt.safehtml.shared.SafeUri clearImage, com.google.gwt.safecss.shared.SafeStyles style)
[ERROR] Errors in 'com/google/gwt/user/client/ui/impl/ClippedImageImpl.java'
[ERROR] Line 104: Failed to resolve 'com.google.gwt.user.client.ui.impl.ClippedImageImpl.Template' via deferred binding
Computing all possible rebind results for 'com.google.gwt.user.client.ui.impl.ClippedImageImpl.DraggableTemplate'
Rebinding com.google.gwt.user.client.ui.impl.ClippedImageImpl.DraggableTemplate
Invoking generator com.google.gwt.safehtml.rebind.SafeHtmlTemplatesGenerator
Constructing interface com.google.gwt.user.client.ui.impl.ClippedImageImpl.DraggableTemplate
Generating method body for image()
[ERROR] Required annotation @Template not present on interface method public abstract com.google.gwt.safehtml.shared.SafeHtml image(com.google.gwt.safehtml.shared.SafeUri clearImage, com.google.gwt.safecss.shared.SafeStyles style)
[ERROR] Errors in 'com/google/gwt/user/client/ui/impl/ClippedImageImpl.java'
[ERROR] Line 96: Failed to resolve 'com.google.gwt.user.client.ui.impl.ClippedImageImpl.DraggableTemplate' via deferred binding
[ERROR] Compiler returned false
我真的不知道该怎么办。我们检查了eclipse和tomcat中的几乎每个设置/配置文件。这都一样。有谁知道在哪里看?也许我在寻找错误的地方。我感谢你能给我的任何帮助。
其他信息(更新):
new SuggestBox()
会导致某些机器上出现gwt-compile-error。没有new SuggestBox()
,一切都在无处编译。我认为这是一个classpath或gwt-compile-sourcepath问题。但我们发现在我们使用的不同机器上没有差异。
答案 0 :(得分:3)
由于您没有包含任何代码,因此很难猜出可能出现的问题,但这里有一些可能的原因:
零参数构造函数
这是我在阅读的文章(下面的参考文献)中提到的最多的一个,似乎正好创造了你所拥有的问题,但我不得不承认我不知道为什么会发生这种情况<你的队友的一些(可能只是在某些虚拟机或类似的东西下需要)。
它可能是一个延迟绑定问题(根据您发布的编译器日志),因此您应检查所有POJO(普通旧Java对象)类是否具有用于延迟加载的零参数构造函数。
Failed to resolve class via deferred binding
注释冲突
也许你有一些错误的注释,如下所述:
Deferred binding failed GWT using uibinder
某些注释如@UiConstructor和@UiFactory不能很好地结合在一起(即使它们在这种情况下实际上并不冲突)也会导致类似的问题。
参考文献&amp;更多
Failed to create an instance of Service via deferred binding
http://www.sencha.com/forum/archive/index.php/t-170786.html?s=fb45a32ac52270e43026da25ff956840
http://samuelcheng.wordpress.com/2011/01/02/deferred-binding-failure-in-gwt/
https://groups.google.com/forum/#!topic/google-web-toolkit/iHajUf7sjtE
答案 1 :(得分:3)
使用ant构建应用程序时,gwt-compile运行时没有错误。
1)因此,如果你比较编译它的方式和ant编译它的方式,你会看到根本原因。
2)如果您没有看到任何差异,或者您不知道Eclipse(或您使用的任何东西)如何编译您的应用程序,请尝试以这种方式编译它(我们可以称之为真正纯粹的方式没有任何日食,蚂蚁,专家或其他第三方“助手”):
java -cp gwt-dev.jar;gwt-user.jar;validation-api-1.0.0.GA.jar;validation-api-1.0.0.GA-sources.jar;any/other/lib.jar;path/to/your/module/source/code com.google.gwt.dev.Compiler moduleName
如果.gwt.xml描述符位于com / your / gwt / module / MyModule.gwt.xml下,则应使用com.your.gwt.module.MyModule
作为moduleName
答案 2 :(得分:0)
如果您正在使用Maven,您可以轻松地使用mvn编译执行javac,然后您可以运行mvn gwt:compile。这些讨厌的错误将会消失。