0

定数を含む Java 構成ファイルがあります。

ビルドに応じて定数の値を置き換えるためにantを使用しています。プリコンパイル ターゲットの場合:

<replace 
    file="Config.java"
    value="default"
    propertyFile="${build.env}.properties">
<replacefilter 
    token="@mytoken@" 
    property="myprop.x"/>
</replace>

うまくいきます。しかし、これを実行すると、ソース ファイルが変更されます。@mytoken@ が最初に置き換えられたため、再度実行しても何も置き換えられません。

私は Config.java をプロジェクトの外に置きたくありません。なぜなら、それを eclipse で動作させたいからです。ファイルが予期された場所にない場合、多くのコンパイル エラーが発生します。

ビルド後のターゲットなどに戻すことを考えていましたが、それが安全かどうかはわかりません。ビルドが失敗した場合、またはユーザーがスクリプトを中断した場合、スクリプトは実行されず、値は元に戻されません。

何か助けはありますか?前もって感謝します。

4

1 に答える 1

1

この仕事に取り組まなければならなかったとき、私は別の方法で取り組みました。実際のソース ファイルを編集する代わりに、ant スクリプトは常にVersion.java. Version.javaリポジトリにチェックインされることはありませんが、インターフェイスのVersion実装はチェックインされます。このように、生成されたファイルの存在に静的に依存する必要はありません。

public String getVersionHelper() {
  try {
    Class versionClass = Class.forName("Version");
    IVersion version = (IVersion) versionClass.newInstance() 
    return version.getVersion();
  } catch (ClassNotFoundException ex) {
    return "NO VERSION";
  }
}

重要な点は、公式ビルドは常に eclipse ではなく ant で行われるということです。これにより、テストのために Eclipse で実行しても、正常にコンパイルできます。

于 2012-05-13T14:22:07.737 に答える