【问题标题】:Failed to resolve class via deferred binding无法通过延迟绑定解析类
【发布时间】:2012-12-11 14:05:58
【问题描述】:
// ...some imports

public class Menu {
    final MenuMaker myClass = GWT.create(MenuMaker.class);  // ERROR

我的...gwt.xml:

...
<generate-with class="com.gwt.rebind.MenuGenerator">
  <when-type-assignable class="com.gwt.client.MenuMaker" />
</generate-with>
...

当我在 DevMode 中运行编译时,一切都可以正常工作,但是当我“使用 GWT 编译器构建项目”时,我得到了这个错误:

      [ERROR] Line 15:  Failed to resolve 'com.gwt.client.MenuMaker' via deferred binding
   Scanning for additional dependencies: jar:file:/C:/eclipse/plugins/com.google.gwt.eclipse.sdkbundle_2.4.0.v201208080121-rel-r42/gwt-2.4.0/gwt-user.jar!/com/google/gwt/dom/client/DOMImpl.java
      [WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
         [WARN] com.gwt.client.MenuMakerGen
   [ERROR] Cannot proceed due to previous errors

在 com.gwt.rebind.MenuGenerator 的末尾:

sourceWriter.commit(logger);

我需要帮助。

【问题讨论】:

  • 您可能错过了在 GWT 编译器的构建路径中包含具有 com.gwt.client.MenuMaker 的 jar。还要检查 com.gwt.client.*gwt.xml 是否到位(不被任何过滤器排除)。
  • MenuMaker 是我的课。我不知道延迟绑定需要哪些库,但在开发模式下都可以正常工作。你说的是什么过滤器?
  • 如果使用 Maven,.xml 文件应放在与 .java 文件相同的包(文件夹路径)中的 src/main/resources 中。如果使用 Ant,请确保将 .xml 添加到您的类路径中。如果使用支持 m2e 的 Eclipse,有时构建路径会忽略 .xml,如果它被放置在 src/main/resources,...通过项目的首选项修改项目的构建路径。

标签: gwt binding deferred


【解决方案1】:

检查你的model/ Pojo Class 应该implements Serializable

interface 还有 Classdefault constructor(无参数构造函数)。

【讨论】:

    【解决方案2】:

    在我的情况下,资源包属性文件中与方法名称对应的键丢失,添加后问题解决。

    【讨论】:

      【解决方案3】:

      在我的例子中,一些模型类没有实现 com.google.gwt.user.client.rpc.IsSerializable,这就是我得到问题中提到的错误的原因。

      【讨论】:

        【解决方案4】:

        检查 gwt 编译问题。留言

        [ERROR] Line 15:  Failed to resolve '...' via deferred binding
        

        可能由 gwt 代码中的编译问题引起。在我的例子中,它是一个类,它仅在应用程序的服务器端可用,但在属于应用程序的“共享”部分的类中被引用。

        在Java中它编译得很好,所以我在eclipse中没有错误。上述错误消息仅在使用 maven 构建时出现。仍然很难找到真正的问题,因为消息文本不是很有帮助。

        事实证明,在 com.google.gwt.dev.DevMode 上运行应用程序会生成更详细的 gwt 编译日志文件(可能有人可以配置 maven 来做同样的事情?)。 在这个更详细的日志的开头,有一些条目指出了上面描述的问题。更正这些问题后,“无法通过延迟绑定解决...”错误消失了。

        【讨论】:

          【解决方案5】:

          检查您的所有客户端类是否具有默认的零参数构造函数。我遇到了同样的“延迟绑定”问题,结果发现我的一个类没有默认构造函数。这很奇怪,因为 GWT 编译器日志中甚至没有提到这个类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-23
            • 1970-01-01
            • 2013-12-29
            • 1970-01-01
            相关资源
            最近更新 更多