2011-02-09 94 views
7

假设我正在将一些服务器端类公开给GWT应用程序,但使用GWT特定组件(例如JSNI)可以使某些部分更好。如何提供特定的GWT实现

什么是一些这样做,而不是太hacky的技术?

例如,我知道使用一个子包并使用<super-source/>标签,但这需要包名称不同,这会导致eclipse发生抱怨。社区中的一般解决方案是告诉eclipse使用它作为源文件夹,但是然后eclipse抱怨有两个同名的类。

理想情况下,只有一种方法可以将所有内容保留在单个源代码树中,并且实际上有适用于其他实现的不同类。这就像一个更OO的方法。

我想为像_gwt这样的类自动添加一个后缀,并且我知道我可以编写一个脚本来完成这种类型的转换,但这肯定是一种混乱。

我一直在考虑在我的项目中使用Google的GIN/GUICE库,我认为这里可能有某种解决方案,但我不确定,因为我没有彻底调查过它。

GWT项目过去曾尝试过哪些解决方案?

回答

7

分离实现的最简单方法是使用超级源代码,但仅用于实例化一个唯一命名的实例或分派到不同的方法。理想情况下,超级源代码的实现只需几行,并且不会太差,以至于无法手动推出。

要解决Eclipse/javac双映射和程序包名称问题,GWT源使用两个用户代码为top-level roots:user/src和user/super。例如,AutoBeans包具有JSON引用和评估的拆分实现,one for the JVMone for the browser

实际上没有非常好的方法来实现超级源代码,因为这是一种超出您可以在语言中指定的功能方式。没有什么可以让你说“在这个环境中使用这个实现”而不需要使用一些外部工具。

+1

+1是指Google的解决方案。似乎是最好的选择。我可以使用这个替代源路径作为一个单独的项目,这取决于主项目,并且可以一个接一个地重写各个类,理想情况是以这样的方式导致最小重复代码。 – 2011-02-09 19:12:36