0

Java ファイルが場所に存在する場合にのみ、別のタスクを実行する必要があります。同じものを検索したところ、以下のようなものに出くわしました。

<target name="check-abc">
<available file="abc.txt" property="abc.present"/>

</target>

<target name="do-if-abc" depends="check-abc" if="abc.present"> ... </target>

ただし、私の状況では、ファイルパスは固定されていません。多くのサブディレクトリとファイルを含むディレクトリがあります。これらの場所のいずれかに Java ファイルが存在する場合、プロパティは 2 番目のターゲットを設定して実行する必要があります。ご意見をお聞かせください。

4

2 に答える 2

0

私の例では、 groovy で実装されたカスタム スクリプト conditionを使用しています。

<project name="build" default="build">

    <path id="build.path">
        <pathelement location="lib/groovy-all-2.1.0-rc-1.jar"/>
    </path>

    <condition property="java.found">
        <scriptcondition language="groovy" value="false" classpathref="build.path">
            def ant = new AntBuilder()

            ant.fileset(id:"javaFiles", dir:"src", includes:"**/*.java")

            ant.project.references.javaFiles.each {
                self.value = true
            }
        </scriptcondition>
    </condition>

    <target name="build" if="java.found">
        <echo message="Found java files"/>
    </target>

</project>

または、ビルド内にスクリプト言語を埋め込む必要がないように、カスタム Java 条件を作成することもできます。

于 2013-01-10T23:59:57.570 に答える
0

わかりました、これに対する解決策を考え出しましたが、それを機能させるにはant-contribが必要です。

<target name="check-abc" depends="defineAntContribTasks">
    <path id="foo">
        <fileset dir="${src.dir}">
            <include name="**/*.java"/>
        </fileset>
    </path>
    <for param="some.file">
        <path refid="foo"/>
        <sequential>
            <echo message="checking @{some.file}"/>
            <property name="abc.present" value="true"/>
        </sequential>
    </for>
    <echo message="present = ${abc.present}"/>
</target>

<target name="do-if-abc" depends="check-abc" if="abc.present">
    <!-- whatever -->
</target>

おそらく、echo ステートメントを捨てることができます。ほとんどの場合、何がチェックされているかを確認できます。

于 2013-01-10T16:03:14.783 に答える