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')