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に割り当てます。次に、ファイルを読み取り、ファイルに指定されたプロパティを設定します。ファイルが空の場合、プロパティは定義されません。
テンポラリファイルは、必要に応じて、以降のマクロファートの呼び出しで再利用できることに注意してください。一方、もちろん、プロパティが設定されると、それは不変です。
- 私はそれを試してみるために死にました。 私が3年前に質問したのは、soooの時間を大幅に節約できたということです。 歓声、 Ian – ianmayo