2009-12-03 10 views
5

私はそれらを実行しているコンピュータに応じて異なる可能性のあるファイル/実行可能ファイルの場所をいくつか持っています。これらを何とかantのプロパティで抽象化したいと思います。これを行う最善の方法は何ですか?呼び出されるシステム全体のAntセットアップスクリプトはありますか?または、そのようなスクリプトを作成できますか?ant:システム依存のプロパティを設定する最善の方法は?

答えて

1

カスタマイズするプロパティを定義する必要があるproperties.xmlというAntビルドファイルをセットアップします。ここで

は、私は私のプロジェクトのために使用していますproperties.xmlの定型(私はAntの上の本の一つからそれを適応してきた)である:ここ

<?xml version="1.0" encoding="UTF-8"?> 
<project 
    name="workspace-properties" 
> 
    <dirname 
    property="workspace-properties.basedir" 
    file="${ant.file.workspace-properties}" 
    /> 

    <!-- 
    ========================================================== 
    Load Environment Variables 
    ========================================================== 
    --> 
    <!-- #Load environment variables --> 
    <property environment="env" /> 

    <!-- this is here to deal with the fact that an IntelliJ IDEA build 
    has no ant home 
    --> 
    <property 
    name="ant.home" 
    value="${env.ANT_HOME}" 
    /> 

    <!-- get Unix hostname, and set to Windows comparable name --> 
    <!-- #Trick to get host name x-platform --> 
    <property 
    name="env.COMPUTERNAME" 
    value="${env.HOSTNAME}" 
    /> 

    <!-- 
    ========================================================== 
    Load property files 
    Note: the ordering is VERY important. 
    ========================================================== 
    --> 
    <!-- #Allow even users property file to relocate --> 
    <property 
    name="user.properties.file" 
    location="${user.home}/.build.properties" 
    /> 

    <!-- Load the application specific settings --> 
    <!-- #Project specific props --> 
    <property file="build.properties" /> 

    <!-- 
    ========================================================== 
    Define your custom properties here. 
    You can overwrite them through build.properties and 
    ${user.home}/.build.properties 
    ========================================================== 
    --> 

    <property name="myexec1" location="/usr/bin/myexec1"/> 
    <property name="myexec2" location="/usr/bin/myexec2"/> 

</project> 

重要なことは、として多くの有用なデフォルトを思い付くことです可能な限りプロパティ値を入力すると、カスタムbuild.propertiesファイルが決して生成されないことがあります。

このファイルは、プロジェクトのbuild.xmlにある<import>という名前だけです。

<project 
    name="my-project" 
> 
    <!-- this is done, so you may import my-project somewhere else --> 
    <dirname 
    property="my-project.basedir" 
    file="${ant.file.my-project}" 
    /> 

    <import file="${my-project.basedir}/relative/path/to/properties.xml"/> 

    <target name="using.myexec1"> 
    <echo message="myexec1=${myexec1}"/> 
    </target> 
</project> 

あなたはmy-projectにmyexec1のカスタム値をしたい場合は、単にのbuild.xmlが置かれている同じディレクトリにあるカスタムフラットbuild.propertiesファイルをドロップします。

build.propertiesファイルは次のようになります。

myexec1=c:/custom/path/to/myexec1.exe 
+0

はLinuxとWindowsで動作します – Rebse

8

私は、多かれ少なかれ標準build.propertiesbuild-local.propertiesファイルを使用します。

最初の値にはすべての環境に共通するデフォルト値が含まれ、2番目の例外には例外が含まれます。最初のものは転覆にチェックされ、もう一方は転覆にチェックされます。

EDIT:コピー/貼り付けAKRの優れたアイデア

また、デフォルトのプロパティを使用すると、上のビルドシステムを導入する可能性があるOSや他のそれぞれのファイルを持っているかもしれません。これらのファイルは、バージョン管理システムにもチェックインすることができます。

Antスクリプトは、すべてのファイルが含まれますフォロー(覚えている:Antの中で最初の定義勝):あなたは、デフォルトのプロパティを持っているかもしれませんウラジミールのソリューションに加えて

<property file="build-local.properties"/> 
<property file="build.properties"/> 
<property file="build-${os.name}.properties"> 
+0

なぜビルドローカルなのでしょうか?最初? –

+0

@ KalpeshSoniこれにより、ローカルファイルのすべてのプロパティをオーバーライドすることができます(ロードされる最初のもの)。私が間違っていると思うのは、デフォルトファイルを上書きする必要があるため、OS依存ファイルです。 – PhoneixS

10

は、OSごとにファイルビルドシステムを展開するかもしれません。パスを設定するには、$ {os.name}(およびその他のJavaシステムのプロパティ)を使用します。たとえば、

<property file="build-${os.name}.properties"> 

これらのファイルは、バージョン管理システムでも維持管理することができます。

+0

+1良いアイデア。私は、 'file:///'と 'file://'を別々のシステムで使うことに問題があり、あなたの命題はこのケースをうまく処理するでしょう。 – Vladimir

関連する問題