【问题标题】:GWT conditional compileGWT 条件编译
【发布时间】:2009-08-11 07:45:38
【问题描述】:

我对 GWT 1.5 和 GWT 1.7 应用程序使用相同的源代码。

我想知道有没有办法为一个或另一个版本有条件地编译部分 java 代码。

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

【问题讨论】:

  • 我不这么认为。为什么要编译两个 GWT 源?我们从 1.5 升级到 1.7 没有问题。
  • 我们做到了。但在一种情况下,旧 (1.5) 和新 (1.7) 编译代码的行为不同。它是 java 和本地插入脚本的组合。将旧 (1.5) 代码移至新接口以删除所有已弃用的调用目前需要做很多工作。

标签: java javascript gwt


【解决方案1】:

解决方法很简单。

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

【讨论】:

    【解决方案2】:

    如果你真的想这样做,我想方法是使用生成器。

    使用生成器,您可以延迟绑定(有点可怜的自省)。

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

    【讨论】:

      【解决方案3】:

      if (version.startsWith("1.5")) { // 以 1.5.* 的方式做某事 }

      实际上是个坏主意。理想情况下,您应该在此处使用绝对字符串值,因为 GWT 编译器将在编译输出的 if 条件内评估相等性并修剪无法访问的代码。使用 .startsWith 意味着所有代码都将在最终应用程序中结束。

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

      【讨论】:

      • 感谢您指出这一点,但这是我找到的唯一解决方案。而且它只适用于小代码sn-p。所以这个解决方案对我来说很好。
      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 2012-04-09
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多