美しく機能するソリューションを見つけました:<super-source>
私のライブラリの .gwt.xml ファイルのタグです!
基本的に、ライブラリには次の EnvironmentFlags クラスの 2 つのバージョンがあります。フォルダ " lib "にある Java で使用される実際のライブラリの 1 つ:
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 コンパイラは、そのクラスのソースをスーパーソース ディレクトリからロードされた 2 番目のバージョンに置き換え、GWT を設定します。 flag を true に設定し、DEV_MODE フラグを GWT から取得したものに設定します。
さて、私のコードでは、次のように簡単に使用できます。
if (EnvironmentFlags.IS_GWT) {
// Do GWT stuff
} else {
// Do plain-old Java stuff
}
Java と GWT コンパイラの両方が、それぞれの到達不能/不要なコードをコンパイル結果から削除する必要があります。つまり、実行時のオーバーヘッドは必要ありません。
PS: IS_DEV_MODE フラグは、実際には私の元の質問とは何の関係もありません。GWT アプリをテストしているかデプロイしているかに応じて、コードの動作を変える (たとえば、より冗長にする) ことができる景品としてこれを含めました。