在 2 个 GWT 项目之间共享 RemoteService 实现

Posted

技术标签:

【中文标题】在 2 个 GWT 项目之间共享 RemoteService 实现【英文标题】:Sharing RemoteService implementations between 2 GWT projects 【发布时间】:2013-03-02 10:03:15 【问题描述】:

我一直在努力尝试将 RemoteService 实现从一个 GWT 项目重用到一个新项目中。 这是大图:

我有一个正在运行的 smartgwt-mobile 项目,我们现在决定我们想要一个相同项目的桌面版本,使用常规的 smart-gwt。这个新应用的 GUI 显然会有所不同,但服务器端代码将完全相同。

我试图通过链接新源结构内其他项目中的包文件夹(我正在使用带有 GWT 插件的 Eclipse)或添加借用代码路径作为构建路径的过滤源文件夹,虽然这满足 Eclipse 依赖项检查器,但 GWT 编译器无法找到借用代码,这表明我需要在模块 .gwt.xml 文件中添加“继承”声明。

当我这样做并重新编译它时,现在需要在借用代码的根目录中有第二个模块 .gwt.xml 文件,这是不可接受的,因为它会影响其他项目。

我一直在阅读 GWT 模块文档,但看不到如何实现这样的方案。实际上可能无法做到我想要实现的目标。

如果这能解决问题,我愿意创建第三个项目,该项目仅定义一个 GWT RemoteService 模块,然后移动和桌面 smartgwt 项目都将继承该模块。

有人对如何解决这个问题有建议吗?

【问题讨论】:

【参考方案1】:

我同意"third project that simply defines a GWT RemoteService module that then will be inherited by both the mobile and desktop smartgwt projects"

为什么,因为,我已经在这样做了。是的,这显然是一个DAO 项目(数据库层),其中包含我所有的数据库业务逻辑方法。

最好保持单独的DAO layer 将您的data 暴露给services(ex.webservices)

【讨论】:

感谢您的意见。我曾希望有一种在项目之间共享代码的简单方法,但由于没有其他建议,我将创建一个由两个 GWT 项目共享的 RemoteService 项目。 这对于代码维护来说也会更好,如果你发现有用的话,请支持并标记为答案。 您基本上是通过引用我自己的帖子来回答的。尽管很感激,但我不认为这是对我的问题的回答,这是关于在现有 RemoteService 代码中的链接。我显然知道我可以创建一个单独的项目,但是对于这种特殊情况,我试图避免再次创建一个额外的项目。缺乏其他建议对我来说表明没有简单的方法可以做到这一点。我会赞成你的回答。【参考方案2】:

这就是我解决问题的方法。 链接到现有 GWT 项目源文件夹的问题在于 GWT 编译器总是(至少看起来是这样)期望找到 GWT 模块定义文件 (.gwt.xml)。我无法以 GWT 编译器满意的方式链接源文件夹,即使 Eclipse 依赖解析器没有问题。

所以我使用 GWT Eclipse 插件创建了第三个项目。我取消选中“创建示例代码”选项,所以我最终得到了一个空的 GWT 项目。然后我选择“添加”>“新建”>“其他”>“谷歌”>“模块”,输入模块名称,例如'myModule',一个包名,例如“com.myCompany.myModule”并单击“完成”。 GWT 新模块向导创建了包和一个名为“com.myCompany.myModule.client”的子包,我自己创建了“com.myCompany.myModule.server”。

现在我复制了 RemoteService 和相关类(实现和异步版本),以及从我想借用的原始项目中调用 RemoteService 代码的所有服务器端代码,并将其粘贴到新项目中。很快我就满足了所有依赖项,并在新的 Smart-GWT Web 应用程序项目上打开了“构建路径”对话框,并将 GWT 远程服务模块项目包含在项目选项卡中。最后要做的是在 .gwt.xml 文件中添加一个继承元素:

<inherits name='com.myCompany.myModule.MyModule'/>

瞧:就是这样。如果您选择“GWT Compile Project”,它会在开发模式下编译并运行而不会出现警告。

我现在仍然必须从第一个项目中删除共享代码并从模块继承,这只是我已经做过的重复。

最后,这并没有我想象的那么痛苦,所以我推荐这种方法。

【讨论】:

以上是关于在 2 个 GWT 项目之间共享 RemoteService 实现的主要内容,如果未能解决你的问题,请参考以下文章

在客户端和服务器之间共享 GWT 类实现

在 GWT 中,我们如何在 javascript 和 java 之间共享对象?

如何修复多项目 GWT 设置中的 RPC 错误 IncompatibleRemoteServiceException?

gwt-syncproxy 无法连接到地址

在共享包中使用 GWT 的 NumberFormat 类

在与 GWT Module Base 不同的上下文中调用 GWT 服务?