找到了一个完美的解决方案:<super-source>
我的库的 .gwt.xml 文件中的标签!
基本上,我的库中有以下 EnvironmentFlags 类的两个版本。Java使用的实际库中的一个位于文件夹“ lib ”中:
my.library.EnvironmentFlags 看起来像这样:
package my.library;
public class EnvironmentFlags {
public static final boolean IS_GWT = false;
public static final boolean IS_DEV_MODE = false;
}
然后文件夹“ super /my/library”中的文件如下所示:
package my.library;
import com.google.gwt.core.client.GWT;
public class EnvironmentFlags {
public static final boolean IS_GWT = true;
public static final boolean IS_DEV_MODE = !GWT.isProdMode();
}
现在神奇的是:我的库的 .gwt.xml 文件如下所示:
<module>
<source path='lib' />
<super-source path='super' />
</module>
这导致使用 EnvironmentFlags 类的第一个版本的普通 Java,它只是将两个标志设置为 false,而 GWT 编译器用从超级源目录加载的第二个版本替换该类的源代码,它设置了 GWT标志为真,DEV_MODE 标志为它从 GWT 获得的任何东西。
现在,在我的代码中,我可以简单地使用以下内容:
if (EnvironmentFlags.IS_GWT) {
// Do GWT stuff
} else {
// Do plain-old Java stuff
}
并且,Java 和 GWT 编译器都应该从编译结果中删除相应的不可访问/不需要的代码,即不需要运行时开销。
PS: IS_DEV_MODE 标志实际上与我原来的问题没有任何关系。我只是将它作为免费赠品包含在内,它允许我根据我是在测试还是部署我的 GWT 应用程序让我的代码行为不同(例如,更冗长)。