在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>