GWT "shared"对象继承/转换器的替代



在GWT应用程序中,我们有一个"共享"包,顾名思义,它包含客户端和服务器端代码之间共享的对象。我们有一个多模块的maven项目:

+ server
|  |
|  + businessLogicPackage
|
+ gwt
   |
   + client
   |
   + server
   |    |
   |    + converter
   |    |
   |    + rpc
   |
   + shared 

每次我需要在服务器模块中重用共享对象时,我需要使用位于gwt/server/converter中的一些转换器来转换共享对象。我尝试使用继承并让共享对象从服务器/businessLogicPackage继承类,认为我可以使用简单的强制转换操作。这会产生一个错误。显然GWT不能从外部模块编译源代码。

> No source code is available for type server.businessLogicPackage.x; did you forget to inherit a required module ?
知道:

  • 我们正在操纵大量的"共享"对象
  • 我希望我的业务逻辑保持在一个单独的模块,所以我可以重用它在其他地方
  • 我不想写所有这些转换器

谁能和我分享一些最佳实践/替代方案?2014年流行什么?

您的问题是在服务器模块中使用gwt模块和共享包中的类而无需手动转换?

您可以简单地创建一个名为shared的第三个模块,例如,它包含gwt客户端和服务器模块使用的类。

gwt和服务器模块依赖于这个新的共享模块。要使GWT能够访问源代码,您需要向新模块添加一个MySharedModuleName.gwt.xml,并将其包添加为源代码。在GWT模块中,为MySharedModuleName添加一个inherit标记。

然后,GWT需要访问源代码。您可以在您的gwt模块pom中添加一个依赖项到源代码jar(如果您创建它的话):<classifier>sources</classifier>。或者在您的共享模块中添加目标gwt:resources,以包含jar中的源代码。

最后,我将源代码添加到编译后的jar中,因此只需向POM添加一个依赖项(没有分类器)就足够了。我的gwt模块继承了Nicolas Morel提出的"共享"maven模块的gwt模块。

    <build>
        <resources>
            <resource>
                <directory>${project.build.sourceDirectory}</directory>
            </resource>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
            </resource>
        </resources>
    </build>

最新更新