Не удалось разрешить класс через отложенную привязку

// ...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);

Мне нужна помощь.

Ответ 1

Проверьте, имеют ли все ваши классы клиента по умолчанию, конструктор с нулевым параметром. У меня была такая же проблема "отсрочки привязки", и оказалось, что у одного из моих классов не был конструктор по умолчанию. Это было странно, потому что этот класс даже не упоминался в журнале компилятора GWT.

Ответ 2

Проверьте проблемы с компиляцией gwt. Сообщение

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

может возникнуть из-за проблем с компиляцией в вашем коде gwt. В моем случае это был класс, который был доступен только на стороне сервера приложения, но был указан в классе, принадлежащем к "общей" части приложения.

В Java он скомпилировался хорошо, поэтому в eclipse не было ошибок. Вышеприведенное сообщение об ошибке появилось только при создании maven. Тем не менее было довольно сложно найти реальную проблему, так как текст сообщения не очень помог.

Оказалось, что запуск приложения на com.google.gwt.dev.DevMode приведет к созданию более подробного файла журнала gwt-компиляции (возможно, можно настроить maven на то же?). В начале этого более подробного журнала были записи, которые указывали на проблему, описанную выше. После исправления этих проблем "Не удалось разрешить... через отложенную привязку" -error исчез.

Ответ 3

В моем случае некоторые из классов моделей не выполняли com.google.gwt.user.client.rpc.IsSerializable, поэтому я получил ошибку, упомянутую в вопросе.