2009-08-11 137 views
1

我正在使用GWT 1.5和GWT 1.7应用程序的相同源代码。GWT条件编译

我想知道有没有一种方法来有条件地编译一个或另一个版本的Java代码的部分。

我知道有一种方法可以为模块XML文件中的小部件和浏览器执行此操作。

+0

我不这么认为。你为什么要编译两个GWT源代码?我们从1.5到1.7没有问题。 – 2009-08-11 13:35:40

+1

我们做到了。但是在一种情况下,旧的(1.5)和新的(1.7)编译的代码行为不一样。它是Java和原生插入脚本的组合。将旧的(1.5)代码移动到新的接口中去除所有不赞成使用的调用目前有很多工作要做。 – Drejc 2009-08-12 07:26:03

回答

1

解决方案非常简单。

String version = GWT.getVersion(); 
if (version.startsWith("1.5")) 
{ 
    // do something the 1.5.* way 
} 
0

如果你真的想这样做,我想方法是使用一个发电机。

有了一个发电机,你可以有延迟绑定(有点穷人的内省)。

要访问1.5或1.7代码,您必须在接口中定义通用API,并使用GWT.create获取具体实现。

0

如果(version.startsWith( “1.5”)){ // 做一下1.5。*的方式 }

是竟是那样的坏主意。理想情况下,您应该在这里使用绝对字符串值,因为GWT编译器将评估相等性并在编译输出的if条件内修剪不可达代码。使用.startsWith意味着所有的代码将在最终的应用程序中结束。

不幸的是,GWT版本不是编译时的属性。也许最好的方法是创建一个空的Generator实现,它只是从模块中的“ClassName”调用中返回“ClassName15”或“ClassName17”。然后,您可以在编译时从生成器调用About.version(),并在编译时查找该版本。

+0

感谢您指出,但这是我找到的唯一解决方案。它只适用于一小段代码片段。所以这个解决方案对我来说工作得很好。 – Drejc 2009-08-29 20:06:36