1

对于我的项目,我尝试扩展不随客户端模块继承的 GWT 类。例如,我想创建一个简单的 com.google.gwt.resources.ext.ResourceGenerator 实现。

public class SimpleResourceGenerator implements ResourceGenerator

并使用而不是 ClientBundle 的默认 @ResourceGeneratorType - BundleResourceGenerator

@ResourceGeneratorType(SimpleResourceGenerator.class)
    public interface Resources extends ClientBundle {

但不成功。

如果我将 SimpleResourceGenerator 类放在“client”包下,GWT 编译器会说:

         [ERROR] Line 11: No source code is available for type com.google.gwt.resources.ext.ResourceGenerator; did you forget to inherit a required module?
         [ERROR] Line 13: No source code is available for type com.google.gwt.core.ext.TreeLogger; did you forget to inherit a required module?
         [ERROR] Line 13: No source code is available for type com.google.gwt.resources.ext.ResourceContext; did you forget to inherit a required module?
         [ERROR] Line 13: No source code is available for type com.google.gwt.core.ext.typeinfo.JMethod; did you forget to inherit a required module?
         [ERROR] Line 14: No source code is available for type com.google.gwt.core.ext.UnableToCompleteException; did you forget to inherit a required module?
         [ERROR] Line 19: No source code is available for type com.google.gwt.resources.ext.ClientBundleFields; did you forget to inherit a required module?
         [ERROR] Line 36: No source code is available for type com.google.gwt.resources.ext.ClientBundleRequirements; did you forget to inherit a required module?

如果我将所有 gwt-user 和 gwt-dev 源链接到项目,我还有其他未解决的依赖项。

Loading inherited module 'com.google.gwt.user.User'
   Loading inherited module 'com.google.gwt.animation.Animation'
      Loading inherited module 'com.google.gwt.core.Core'
         Loading inherited module 'com.google.gwt.core.CrossSiteIframeLinker'
            [ERROR] Unable to load class 'com.google.gwt.core.linker.DirectInstallLinker'
java.lang.ClassNotFoundException: com.google.gwt.core.linker.DirectInstallLinker

我无法理解 GWT 编译器以及它在编译时如何解析类型。为什么它找到一些 GWT 类而找不到其他类。

我看到的唯一方法是编译 SimpleResourceGenerator 的模块重写

   <generate-with
    class="com.google.gwt.resources.rebind.context.StaticClientBundleGenerator">

    <!-- We have to specify on which types to execute the Generator -->
    <when-type-assignable
      class="com.google.gwt.resources.client.ClientBundle" />
   </generate-with>

从继承的 com.google.gwt.resources.Resources.gwt.xml 和自己的生成器

  <generate-with
    class="com.example.gwt.SimpleBundleGenerator">
      <when-type-assignable
        class="com.google.gwt.resources.client.ClientBundle" />
  </generate-with>

并扩展 com.google.gwt.resources.rebind.context.AbstractClientBundleGenerator。

但这对我来说似乎有点太复杂了。有没有比通过生成器和代码替换延迟绑定更简单的方法来扩展 GWT 类?

4

1 回答 1

1

生成器不应该包含在“客户端”包中,但它生成的 java 源代码应该包含。

“客户端”包用于 gwt-compile 查找在将应用程序编译为 javascript 时应使用的 java 源文件,并且生成器用于在编译时生成 javasource 文件。

于 2011-06-22T18:00:54.063 回答