2009-05-28 18 views
8

ANTで単一のターゲットを実行する方法はわかっていますが、 "depends"属性もチェックしてターゲットの前に実行します。これを防ぐ方法やANTファイルを構造化する方法がありますので、これをもっと簡単に行うことができますか?ANT - 依存関係のない単一のターゲットを実行

答えて

11

ターゲットの "withoutdeps"バージョンを作成します。あなたは

<target name="A" depends="B,AwithoutDeps"/> 

<target name="AwithoutDeps"> 
    ... 
</target> 

<target name="A" depends="B"> 
    ... 
</target> 

の変更があった場合は今、あなたは(そしてAwithoutDeps Bをオフに解雇されます)通常通りAを呼び出すことができますまたは単に明示的AwithoutDepsを呼び出し、何DEPSは解雇しません。これらより、いくつかの優れた名を選択し、もちろん

[順序で依存関係を「依存」と呼ぶことに注意してください];)

+0

私のソリューションに非常によく似ています - 違いは単なるスタイルの問題だと思います。これはantの依存性機能を利用しています。私のソリューションは "カプセル化"機能を利用しています。 – Jared

+0

ありがとう!これは、コピーして貼り付けるよりもきれいです。 – GreenieMeanie

+0

@Jared - 私もantcallについて考えましたが、それはプロパティのコピーなどを設定するので、より高価なAFAIKです。しかし、それは大したことではありません... –

2

あなたの唯一の単純な選択は、問題のターゲットのコピーを作成し、依存関係を持たないようにすることだと思います。

+0

私はちょうど依存する属性を削除しています(これはほぼ同じことです)が、おそらくもっと洗練された解決方法があると思います。 – GreenieMeanie

+0

これをantコマンドラインのオプションにするとよいでしょう。 – user959690

1

が、私はこのような何かをするだろう:

<target name="doSomethingNoDeps"> 
    ... 
</target> 

<target name="doSomething" depends="doSomeOther"> 
    <antcall target="doSomethingNoDeps"/> 
</target> 
2

一つの可能​​性を使用することです依存対象の属性はifまたはunlessです。たとえば:

<target name="dependency1" unless="dependency1.disabled"> 
    <echo>Hello from dependency 1!</echo> 
</target> 

<target name="dependency2" unless="dependency2.disabled"> 
    <echo>Hello from dependency 2!</echo> 
</target> 

<target name="main-target" depends="dependency1, dependency2"> 
    <echo>Hello from the main target!</echo> 
</target> 

は、今あなたがしたくない依存関係を除外する-Ddependency1.disabled=trueおよび/または-Ddependency2.disabled=trueでのAntを実行することができますが、デフォルトではまだそれらを含めることになります。

もちろん、それが簡単な場合は、「グローバル」dependencies.disabledプロパティを設定することもできます。あなたが(依存関係がデフォルトで除外されている)、この動作のを行いたい場合は

、ちょうどif代わりunlessのを使用(し、代わりに「無効」の「dependency1.enabled」のようなプロパティ名を持っています) 。

-1

私はコードの一部でマクロを作りました。 その後、2つのターゲットを作成し、1つは "arg1"、2番目は "arg2"でマクロを呼び出します。 パラメータを設定せずにマクロを作成することもできます。

+0

答えは問題を解決する方法を示す必要があります。あなたがしたことを示してください。 –

関連する問題