对于我的项目,我尝试扩展不随客户端模块继承的 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 类?