0

foreach を使用せずに ant のディレクトリ構造をループしたい。同じことを行うエレガントな方法はありますか?

4

2 に答える 2

3

適用タスクは、一連のディレクトリまたはファイルを反復処理できます

<target name="run-apply">
    <apply executable="echo">
        <dirset dir="src"/>
    </apply>
</target>

私は個人的にグルーヴィーなANTタスクが好きです

<target name="run-groovy">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
    <dirset id="dirs" dir="src"/>
    <groovy>
        project.references.dirs.each {
            ant.echo it
        }
    </groovy>
</target>

タスク jar のインストールは簡単に自動化できます。

<target name="install-groovy">
  <mkdir dir="${user.home}/.ant/lib"/>
  <get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.1/groovy-all-2.1.1.jar"/>
</target>

最後に、他のビルド ファイルを反復処理する場合、subantタスクは非常に便利です。

<target name="run-subant">
    <subant>
        <fileset dir="src" includes="**/build.xml"/>
    </subant>
</target>
于 2013-03-06T21:17:06.047 に答える
0

簡単な答え:そうではありません。これを回避する方法はありますが、私<for/>は明快さと単純さのために ant-contrib タスクを好みます。この<local/>タスクにより、変数の値をローカライズできるようになりました。以前は、ant-contrib の<var/>タスクを使用して値をリセットする必要があったため、値を何度もループすることができました。

<for param="directory">
    <fileset dir="${some.dir}"/>
    <sequential>
        <local name="foo"/>
        <local name="bar"/>  <!-- Properties that may change with each iteration -->
        <!-- Here be dragons -->
    </sequential>
</for>

すっきりしていて、シンプルで、わかりやすいです。Ant Contrib に関して多くの人が抱えている大きな問題は、誰もが自分の$ANT_HOME/libディレクトリに Ant Contrib をインストールしているわけではないということです。十分です。したがって、ant-contrib を使用する場合は、プロジェクトの一部として配置してください。

ant-contrib jar を${basedir}/antlib/antcontrib入れて、これをプログラムに入れます。

<taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
        <fileset dir="${basedir}/antlib/antcontrib"/>
    </classpath>
</taskdef>

これで、誰かが私のプロジェクトをチェックアウトすると、ant-contrib が既にインストールされており (プロジェクト内にあるため)、アクセス可能になっています (プロジェクト<taskdef>の ant-contrib.jar の場所でタスクを指定しているため)。

于 2014-02-13T17:59:57.040 に答える