GWT 模块 xml 指定单个源元素 class
GWT module xml source element to specify single class
我有一个 GWT 应用程序 (FooGwtApp) 和一个库模块 (FooLib) 用作 FooGwtApp 的依赖项。 FooLib 的包结构如下所示:
packageFoo.ImportantClass
packageFoo.UnimportantClass
packageBar.OtherClass
我希望 ImportantClass(并且只有 ImportantClass)被 GWT 编译器编译成 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 的引用).
现在,如果我将对 ImportantClass 的引用放入 FooGwtApp 的客户端代码中,GWT 编译器将失败,因为它在源路径中找不到 ImportantClass:
No source code is available for type packageFoo.ImportantClass; did you forget to inherit a required module?
我可能搞砸了 ImportantClass.gwt.xml 中的源路径/includes 属性 - 将当前包定义为带有 path="" 的根包不是有效的表示法,或者 includes 属性有问题。或两者。或者两者都不是。
你能告诉我哪里出了问题吗?
原来问题不在ImportantClass.gwt.xml,而是在其他Maven相关的东西:
ImportantClass.gwt.xml 应该放在 src/main/resources/packageFoo 下,而不是 src/main/java/packageFoo,否则不会打包到二进制jar中。
GWT 编译器从 Java source 编译为 Javascript source。这意味着我们不仅需要 ImportantClass.class in FooLib.jar,还需要它的来源。最好的解决方案是在 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?
解决上述问题后,问题中出现的源路径声明有效。
我有一个 GWT 应用程序 (FooGwtApp) 和一个库模块 (FooLib) 用作 FooGwtApp 的依赖项。 FooLib 的包结构如下所示:
packageFoo.ImportantClass
packageFoo.UnimportantClass
packageBar.OtherClass
我希望 ImportantClass(并且只有 ImportantClass)被 GWT 编译器编译成 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 的引用).
现在,如果我将对 ImportantClass 的引用放入 FooGwtApp 的客户端代码中,GWT 编译器将失败,因为它在源路径中找不到 ImportantClass:
No source code is available for type packageFoo.ImportantClass; did you forget to inherit a required module?
我可能搞砸了 ImportantClass.gwt.xml 中的源路径/includes 属性 - 将当前包定义为带有 path="" 的根包不是有效的表示法,或者 includes 属性有问题。或两者。或者两者都不是。
你能告诉我哪里出了问题吗?
原来问题不在ImportantClass.gwt.xml,而是在其他Maven相关的东西:
ImportantClass.gwt.xml 应该放在 src/main/resources/packageFoo 下,而不是 src/main/java/packageFoo,否则不会打包到二进制jar中。
GWT 编译器从 Java source 编译为 Javascript source。这意味着我们不仅需要 ImportantClass.class in FooLib.jar,还需要它的来源。最好的解决方案是在 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?
解决上述问题后,问题中出现的源路径声明有效。