GWT - 将外部 java 类添加到客户端项目

Posted

技术标签:

【中文标题】GWT - 将外部 java 类添加到客户端项目【英文标题】:GWT - adding external java classes to client project 【发布时间】:2011-01-21 10:24:26 【问题描述】:

我有一个 GWT 项目。客户端代码位于“客户端”目录中。我想附加一个外部目录中的外部 java 类(主要是普通 POJO DTO 类)。如何配置gwt.xml文件?

我收到此类错误:

[错误] 'file:/C:/development/projects/CodeSpaces/LocateMe/LocateMeWeb/src/com/dominolog/locateme/client/LocateMeWeb.java' 中的错误 [错误] 第 56 行:com.dominolog.locateme.model.dto.LocationInfo 类型没有可用的源代码;你忘了继承一个必需的模块吗?

【问题讨论】:

【参考方案1】:

如果您有 java 源文件,您只需将目录添加到您的 .gwt.xml 文件中。例如,如果您有一个名为 shared 的子目录,您将添加以下行:

<source path='shared'/>

名为 shared 的文件夹必须在您的主包下一层。因此,如果您的项目 .gwt.xml 文件位于 com.yourdomain.project 中,则共享 folder.package 将为 com.yourdomain.project.shared。请参阅http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModules

上的源路径部分

如果您没有源代码并且只有类,您必须按照 Hilbrand 的说明导入模块。

【讨论】:

好的。但是,如果我要添加的代码不在“客户端”下,即它是我工作空间中的外部目录,该怎么办? 是在同一个项目吗?如果是这样,我假设它以相同的包(在我的示例中为 com.yourdomain.project)开始,并且我概述的内容将起作用。它不需要在客户端下。如果它来自另一个来源/项目,我不知道如何/是否可以将其添加到项目中。 我遇到了同样的问题,在 netbeans 中我需要删除“从 jar 中排除”.java 文件【参考方案2】:

这是另一个有效的解决方案http://www.gordonizer.com/2012/01/referencing-third-party-library-source.html。

我做空了(以防万一这个链接有一天也失效了):

假设包含您要添加的类的外部包是com.foo.bar.bat。 在您的项目中,您创建包com.foo.bar(没有子包bat)。

在您的新包中,您创建一个新的 GWT 模块文件 Foo.gwt.xml,其内容类似于

&lt;module&gt; &lt;source path="bat" /&gt; &lt;/module&gt;

(为了便于阅读,我省略了 XML 标头)

最后使用inherit标签将这个新模块添加到你的主GWT模块中:

&lt;inherits name="com.foo.bar.Foo"/&gt;

【讨论】:

【参考方案3】:

GWT 使用的任何 Java 类都必须有一个模块文件并符合包含子包的包结构。有关更多详细信息,请参阅此 *** 答案:Adding Java packages to GWT。在这种情况下,可以在目录com.dominolog.locateme.model 中创建一个模块文件(例如model.gwt.xml),其中包含以下内容:

<module>
  <source path="dto" />
</module>

在主模块文件中添加对该模块文件的引用,然后 GWT 将获取 com.dominolog.locateme.model.dto 包中的所有类。

2 个注释:

    GWT 将查看目录(和子目录)中的所有类

    包中的类必须存在于源文件中,并且不得包含对 GWT 无法解析的其他库的任何引用(当在 dto 类中使用引用特定数据库用法的注释时,这可能是一个限制)。

更新:重写答案更具体。

【讨论】:

谢谢,但您所指的帖子没有解释任何内容,但我必须将所有代码添加到客户端目录下。这对我来说是不能接受的。 我会尽量说得更具体些。我的工作空间结构是:Workspace-> LocateMeModel LocateMeServer LocateMeMobile LocateMeWeb LocateMeWeb 是一个具有标准项目布局的 GWT 应用程序。在 LocateMeModel 中,我有 Java 类,它们定义了 LocateMeWeb、LocateMeMobile 和 LocateMeServer 常见的 dto(数据传输对象)。因此,我需要 GWT 从此目录 (LocateMeModel) 中获取文件并将其编译为客户端代码。有可能吗?据我所知,GWT 只允许代码必须位于 GWT 项目的客户端目录下。【参考方案4】:

我会尽量说得更具体一些。我的工作区结构是: 工作区

    Lo​​cateMeModel Lo​​cateMeServer Lo​​cateMeMobile Lo​​cateMeWeb

LocateMeWeb 是一个具有标准项目布局的 GWT 应用程序。在 LocateMeModel 中,我有 Java 类,它们定义了 LocateMeWeb、LocateMeMobile 和 LocateMeServer 常见的 dto(数据传输对象)。因此,我需要 GWT 从此目录 (LocateMeModel) 中获取文件并将其编译为客户端代码。有可能吗?据我所知,GWT 只允许代码必须位于 GWT 项目的客户端目录下。

【讨论】:

以上是关于GWT - 将外部 java 类添加到客户端项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GWT 中使用 autobean 将 json 转换为 java 类

GWT - 将客户端和服务器拆分到不同的机器

将 Elemental 添加到 GWT

GWT requestfactory 验证外部服务器上的实体

GWT 客户端中的记录器

如何在 GWT 离线应用程序中包含外部 Javascript