【问题标题】:GWT module xml source element to specify single class指定单个类的 GWT 模块 xml 源元素
【发布时间】:2019-10-12 18:28:55
【问题描述】:

我有一个 GWT 应用程序 (FooGwtApp) 和一个库模块 (FooLib) 用作 FooGwtApp 中的依赖项。 FooLib 的包结构如下:

packageFoo.ImportantClass
packageFoo.UnimportantClass
packageBar.OtherClass

我希望GWT 编译器将ImportantClass(并且只有ImportantClass)编译为JS。将 ImportantClass 移动到另一个包不是一种选择。

我在 packageFoo 中创建了 ImportantClass.gwt.xml,内容如下:

<module>
    <inherits name="com.google.gwt.user.User"/>
    <source path="" includes="**/ImportantClass*"/>
</module>

接下来,我在 FooGwtApp.gwt.xml 中放置了对 ImportantClass 模块定义的继承引用(这似乎可行:IDE 可以识别它,并且能够解析对 ImportantClass.gwt.xml 的引用)。

现在,如果我将 ImportClass 的引用放入 FooGwtApp 的客户端代码中,GWT 编译器将失败,因为它在源路径上找不到 ImportantClass:

类型 packageFoo.ImportantClass 没有可用的源代码;你忘了继承一个必需的模块吗?

我可能弄乱了 ImportClass.gwt.xml 中的源路径/包含属性中的某些内容 - 将当前包定义为带有 path="" 的根包不是有效的表示法,或者包含属性有问题。或两者。或者两者都没有。

你能告诉我哪里出了问题吗?

【问题讨论】:

    标签: gwt


    【解决方案1】:

    原来问题不在于ImportantClass.gwt.xml,而在于其他与Maven相关的东西:

    • ImportantClass.gwt.xml 应该放在 src/main/resources/packageFoo 下,而不是 src/main/java/packageFoo 下,否则不会被打包进入二进制jar。

    • GWT 编译器从 Java 源代码 编译为 Javascript 源代码。这意味着我们不仅需要FooLib.jar 中的ImportantClass.class,还需要它的源代码。最好的解决方案是在 FooLib 的 pom.xml 中使用 maven-source-plugin,并将 FooLib 依赖项导入带有源分类器的 FooGwtApp。

    关于后一个主题,请参阅以下 SO 答案:

    Maven: Distribute source code with with jar-with-dependencies

    How to properly include Java sources in Maven?

    解决上述问题后,问题中的源路径声明有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多