从Gradle使用时,Taskdef +可用任务会导致失败

时间:2015-06-05 07:30:21

标签: ant taskdef

我正在通过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"/>

可用任务似乎没有使用taskdef使用的相同类加载器进行检查?

Oleg Pavliv回答后,

编辑 经过一段时间的努力,这有效地起作用。 我的问题应该更清楚了。

这适用于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')

1 个答案:

答案 0 :(得分: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中调用它,则还应在classpath中指定available

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