1

taskdef を介して ant-contrib をロードしています。次に、「IfTask」が作成されていることを利用可能なタスクで確認しています。これは失敗します

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="/path/to/ant/contrib.jar"/>

<condition property="IfTaskAvailable">
<available classname="net.sf.antcontrib.logic.IfTask"/>
</condition>
<fail message="The If task is not defined" unless="IfTaskAvailable"/>

利用可能なタスクは、タスク定義で使用されるのと同じクラスローダーを使用してチェックしていないようです?

オレグ・パブリフの回答後に編集 少し気を悪くした後、これは効果的に機能します私は私の質問でより明確であるべきでした。

これは Ant では機能しますが、Gradle から ant を呼び出す場合、つまり gradle ビルドでは機能しません。

ant.taskdef(uri:'antlib:net.sf.antcontrib', resource:'net/sf/antcontrib/antcontrib.properties', classpath: '/path/to/ant/contrib.jar')
ant.available(classname:'net.sf.antcontrib.logic.IfTask')
4

1 に答える 1

1

たぶん/path/to/ant/contrib正解ではない

私のコンピューターでは動作します

<project  xmlns:if="ant:if"  xmlns:unless="ant:unless">

    <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="c:/Soft/Java/apache-ant-1.9.4/lib/ant-contrib-1.0b3.jar"/>

    <condition property="IfTaskAvailable">
        <available classname="net.sf.antcontrib.logic.IfTask"/>
    </condition>

    <fail message="Error: The If task is not defined" unless="IfTaskAvailable"/>
    <echo message="IfTaskAvailable: ${IfTaskAvailable}" />

</project>

出力

/cygdrive/c/temp/ant>ant
Buildfile: c:\temp\ant\build.xml
     [echo] IfTaskAvailable: true

BUILD SUCCESSFUL
Total time: 0 seconds

編集: gradle から呼び出す場合は、classpathinavailableも指定する必要があります。

<project  xmlns:if="ant:if"  xmlns:unless="ant:unless">

    <target name="main">
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="c:/Soft/Java/apache-ant-1.9.4/lib/ant-contrib-1.0b3.jar"/>

        <condition property="IfTaskAvailable">
            <available classname="net.sf.antcontrib.logic.IfTask" classpath="c:/Soft/Java/apache-ant-1.9.4/lib/ant-contrib-1.0b3.jar"/>
        </condition>

        <fail message="Error: The If task is not defined" unless="IfTaskAvailable"/>
        <echo message="IfTaskAvailable: ${IfTaskAvailable}" />
    </target>
</project>
于 2015-06-05T08:41:34.683 に答える