【问题标题】:Using java objects from another Maven module in GWT on the client side在客户端的 GWT 中使用来自另一个 Maven 模块的 java 对象
【发布时间】:2011-12-25 06:16:31
【问题描述】:

我有两个 maven 项目,项目 A 包含一些可序列化的模型对象,项目 B 是 GWT 项目。现在我想将项目 A 中的一些对象用于项目 B 中客户端和服务器之间的 RPC 调用。

所以这是我所做的:

GWT 项目 B xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.4.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.4.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='Index'>
<inherits name='com.google.gwt.user.User' />
<inherits name='com.projectA.Models' />

<inherits name='com.google.gwt.user.theme.standard.Standard' />
<entry-point class='com.projectB.client.Index' />

<source path='client' />
<source path='shared' />

</module>

Java 对象项目 A xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.4.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.4.0/distro-source/core/src/gwt-module.dtd">
<module>
<inherits name="com.google.gwt.user.User"/>
<source path="./" />
</module>

我仍然收到“没有可用于类型 com.projectA.Object 的源代码;您是否忘记继承所需的模块?”消息 =(

(POM 依赖已设置!)

【问题讨论】:

  • 你可以给你看 POM 吗?您是否也使用分类器=源添加了对 projectA 的依赖项?您如何“运行 GWT”(编译器?DevMode?使用 gwt-maven-plugin?来自您的 IDE?哪个 IDE?Eclipse?使用 Google Plugin for Eclipse?)

标签: gwt maven module client serializable


【解决方案1】:

为了清楚起见- projectA结构:com.projectA.ProjectA.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.4.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.4.0/distro-source/core/src/gwt-module.dtd">
<module rename-to="first-project">
<inherits name="com.google.gwt.user.User"/>
<source path="./" />
</module>

那么projectB的结构就是:com.projectB.ProjectB.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.4.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.4.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='Index'>
<inherits name='com.google.gwt.user.User' />
<inherits name='com.projectA.first-project' />

<inherits name='com.google.gwt.user.theme.standard.Standard' />
<entry-point class='com.projectB.client.Index' />

<source path='client' />
<source path='shared' />

</module>

我将重命名添加到 projectA gwt.xml。请检查代码。该示例应该可以工作。如果你的 pom 有正确的依赖。

【讨论】:

  • 命名不是问题!我发现我需要将它添加到项目 B 的 POM 中的 maven gwt 插件配置中: com.projectA:Models 这告诉 GWT编译器以包含这些 Maven 包的源代码。现在我需要正确的 Models.gwt.xml 配置来指定正确的文件...
【解决方案2】:

我发现我需要将此添加到项目 B 的 POM 中的 maven gwt 插件配置中:

<configuration>
   <compileSourcesArtifacts>
        <compileSourcesArtifact>com.projectA:Models</compileSourcesArtifact>
   </compileSourcesArtifacts>
</configuration>

这告诉 Maven GWT 插件将源代码复制到 web 目录...此外,您需要项目 B 包中的 GWT xml 文件,其中包含以下内容:

<module>
   <inherits name='com.google.gwt.user.User' />
   <source path='' />
</module>

这告诉 GWT 编译器包含该模块的源代码..

完成

【讨论】:

  • 重要提示:该 *.gwt.xml 文件应放置在正确的包中(与 中指定的 相同)并应具有正确的名称(与 中指定的相同compileSourcesArtifact>)。更多详情 - Using general purpose JARs as GWT library
  • 感谢您发布此信息。我认为唯一的解决方案是使用多项目设置,但这似乎不对。这更有意义。
  • 我相信“compileSourcesArtifact”的使用只有在您无法控制您在那里指定的工件时才有用。在这种情况下,我相信您拥有这两个模块,因此更容易将它们变成“真正的”GWT jar。
  • 我应该使用源 jar,我没有源 jar。但我已经尝试了所有提到的步骤,但仍然遇到同样的错误。我只是不想缩小我的选择范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多