查看GWT示例应用程序和RPC tutorial使用以下程序包约定:
./client/GreetingService.java
./client/GreetingServiceAsync.java
./server/GreetingServiceImpl.java
虽然GWT文档在最佳实践上非常稀疏,但在运行时将哪些组件包含在内,明确的直觉是:
这会让人相信client
中的代码应该不在javac的编译时源路径上。但是,由于GreetingServiceImpl
实现了GreetingService
,所以client
中的代码显然需要在编译期间位于源路径上,并且在部署时包含在运行时类路径中。
鉴于此,为什么GreetingService
界面不会进入shared
?
如果您尝试将其放入shared
,GWT Eclipse Plugin会抱怨“缺少异步接口”......
答案 0 :(得分:4)
让我们试着说清楚:
Service
接口必须可用于您的客户端代码。因此,它必须位于客户端包或共享包中。但ServiceAsync
接口必须与Service
接口位于同一个包中。 ServiceAsync
肯定不是客户端和服务器之间共享的内容。因此,ServiceASync
界面应位于客户端包中。Service
界面会放在客户端包中。ServiceASync
接口包中找不到Service
接口。这会回答你的问题吗?
答案 1 :(得分:0)
在我的项目中,Service
和ServiceAsync
都位于shared
,一切正常。实际上我没有看到任何其他方式SercviceImpl
server
实现Service
接口,编译器需要将它们放在类路径上。
答案 2 :(得分:0)
GWT-RPC生成器使用命名约定(将Async
后缀添加到类名),在Service
中添加“包重命名规则”shared
,同时ServiceAsync
在client
)是不适合许多人的包布局。因此,规则是两个接口都在同一个包中,无论包的名称如何,如果你愿意,可以将它们放在shared
中(如Peter Knego所说)
(该规则也归功于遗留问题,最近在GWT项目中引入了shared
约定,相对于GWT-RPC而言