2012-05-13 19 views
0

私は定数付きJava構成ファイルを持っています。Ant:ソースファイル内のトークンを複数回置き換えます。

私はビルドに従って定数の値を置き換えるためにantを使用しています。プリコンパイル対象:

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

うまく動作します。しかし、私はこれを実行した後、私のソースファイルが変更されます。だから、もう一度実行すれば、@ mytoken @が最初に置き換えられたので何も置き換えられません。

私はEclipseで動作させたいので、Config.javaをプロジェクト外に置いてはいけません。ファイルが期待どおりになければ、多くのコンパイルエラーが発生します。

私はポストビルドターゲットや何かに戻って入れ替えることを考えていましたが、安全かどうかは分かりません。ビルドが失敗した場合、またはユーザーがスクリプトを中断した場合、スクリプトは実行されず、値は戻されません。

助けが必要ですか?前もって感謝します。

+1

ベストソリューションは、Eclipseプロジェクトではなく、別の一時的な場所でビルドを実行することです。 – rsp

+0

プロジェクトのコピーを作成してスクリプトを実行するという意味ですか?悪い考えではなく、スクリプト可能です。 – Ixx

+0

はい、それは私の意味です。通常は、ソースリポジトリから空のビルドフォルダを取得し、ビルドとクリーンアップを行います。 – rsp

答えて

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で実行しても、正常にコンパイルできます。

+0

興味深いアイデアですが、私はプロジェクトをコピーしてコピーをビルドするスクリプトを作成するためのrspの提案(私の投稿のコメントを参照)を好んでいます。あなたの考えは、プロジェクトの複雑さを増します。 – Ixx

関連する問題