2008-08-12 14 views
26

私はビルドスクリプトを持っており、そのスクリプトをコピーしたディレクトリにjarファイルを、簡単にはutilsのjarファイルを呼び出すことができますための一環として。 utils jarは、別のディレクトリにある別のビルドスクリプトによって構築されます。何をしようとしているのは、ビルドスクリプトでutilsビルドスクリプトを実行して、utils jarが最新であることを確認できるようにすることです。Antビルドスクリプト、antcall、依存関係など

だから、私はutilsのは、ファイルを作成インポートする必要があります知っています。インポートタスクは、ほとんどすべての他のアリtaksとは異なり、BASEDIRから実行されていないため動作しません

<import file="../utils/build/build.xml" /> 

は、それがPWDから実行されます。

:だから私は成功したので、今では、IVEは私が仕事を呼び出す必要があり、私の輸入問題を解決し、ビルドファイル

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 
をインポートしないこの小さな小唄を、持っていることを周りを取得するために、よくそれは簡単に右でなければなりません上記では、utilsのは../utils/build/build.xml

私は今に実行している問題のプロジェクト名であることを

<antcall target="utils.package" /> 

ノートはアリ呼び出しがで実行しないということです。 ./utils/buildなので、私が必要とするもの、見つけられないものは本質的にrunatプロパティまたは類似した何か、:

<antcall target="utils.package" runat="../utils/build" /> 

私はこれを必要とする理由は、私のutilsの中でパスをハードコーディング回避するために、相対パスに基づいているjarファイルにコピーするコードを選択するために、ファイルにステップを構築することです私のantファイルにあります。何か案は?

答えて

33

私は何か似たセットを持っている:私は私のテストを構築するの世話を別々のbuild.xmlを呼び出し、メインのAntのbuild.xmlを持っています。これは私がそれを行う方法です。

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

トリックはsubantの代わりantcallを使用することです。他のビルドファイルをインポートする必要はありません。

+0

? –

6

"ant" task代わりの代わりに、現在のビルドファイルにインポートの直接インポートビルドを実行します「antcall」タスクを、使用してみてください。それは "dir"パラメータを持っています:

新しいAntプロジェクトのためのベースディレクトリ 。 inheritallがfalseに設定されている場合を除いて、デフォルトの のデフォルト値は の になります。これにより、呼び出されたプロジェクトの設定がオーバーライドされます( )。

だからあなたが行うことができます:そのような

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

か何かを。

+2

0

あなたはantcallブロックにネスト使用antcallするのparamsを下に渡すことができます。したがって、プロパティをそのようにして渡すことができます(プロパティは不変なので、おそらくbasedirです)。あなたはsubantターゲットにクラスパスを調整する必要がある場合はどう