2009-07-02 20 views
17

私はAntビルドスクリプトを使用して、配布用にEclipseベースのアプリケーションを照合しています。Antの利用可能なコマンドでワイルドカードを使用する方法

ビルドの1つのステップは、正しいライブラリがビルドフォルダに存在することを確認することです。私は現在、このためにAntコマンドを使用しています。残念ながら、新しいEclipseビルドに切り替えるたびに(バージョン番号が更新されるため)、スクリプトを修正する必要があります。

バージョン番号を確認する必要はありません。ファイルがあることを確認するだけです。 Antを使用し

org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11 

org.eclipse.rcp_3.5.0.* 

の代わり:

だから、どのように私はのためにチェックしますか?

歓声、 イアン

答えて

22

あなたが意味する、(this idea後、pathconvert taskに基づく)のようなもの:

<target name="checkEclipseRcp"> 
    <pathconvert property="foundRcp" setonempty="false" pathsep=" "> 
    <path> 
     <fileset dir="/folder/folder/eclipse" 
       includes="org.eclipse.rcp_3.5.0.*" /> 
    </path> 
    </pathconvert> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
+0

- 私はそれを試してみるために死にました。 私が3年前に質問したのは、soooの時間を大幅に節約できたということです。 歓声、 Ian – ianmayo

0

pathconvertタスクは、おそらくほとんどの場合に行くための好ましい方法です。しかし、ディレクトリツリーが非常に大きく、echopropertiesタスクを使用しているときには少し問題が生じます。非常に大きなディレクトリツリーでは、pathconvertによって生成された文字列が膨大になる可能性があります。その後、エコプロパーは膨大な文字列をスプレーし、出力をより扱いにくくします。私は、ファイルがディレクトリに存在する場合に「1」に設定プロパティを作成し、Linux上でmacrodefを使用:内のファイルがある場合は、「テスト」の目標を実行

<macrodef name="chkDirContents" > 
    <attribute name="propertyName" /> 
    <attribute name="dirPath" /> 
    <attribute name="propertyFile" /> 
    <sequential> 
     <exec executable="sh" dir="." failonerror="false" > 
      <arg value="-c" /> 
      <arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' /> 
     </exec> 
    </sequential> 
</macrodef> 

<target name="test" > 
    <tempfile destdir="." property="temp.file" deleteonexit="true" /> 
    <chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" /> 
    <property file="${temp.file}" /> 

    <echoproperties/> 
</target> 

は、次のechopropertiesラインを生成します./ target_dirは/ディレクトリ:

[echoproperties] files.exist=1 

"テスト" は何: それは一時的なファイル名、$ {temp.file}を生成し、後でプロパティファイルとして使用することができます。 次に、macrodefを実行します。これはシェルを呼び出してdirPathディレクトリの内容を確認します。 dirPathにファイルまたはディレクトリがある場合、一時ファイルにpropertyNameプロパティの値を1に割り当てます。次に、ファイルを読み取り、ファイルに指定されたプロパティを設定します。ファイルが空の場合、プロパティは定義されません。

テンポラリファイルは、必要に応じて、以降のマクロファートの呼び出しで再利用できることに注意してください。一方、もちろん、プロパティが設定されると、それは不変です。

+0

非常に寛大なあなたにステップアップして改善を提供します。私が4年前にこの改善を知っていただけの場合、私は3年前にベースソリューションを知っていたとコメントしました。 私は5年間でどのような改善が得られるだろうか? – ianmayo

7

resourcecount条件と若干短く、より簡単な方法:完璧なサウンドを

<target name="checkEclipseRcp"> 
    <condition property="foundRcp"> 
     <resourcecount when="greater" count="0"> 
      <fileset file="/folder/folder/eclipse/org.eclipse.rcp_3.5.0.*"/> 
     </resourcecount> 
    </condition> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
関連する問題