我正在通过一个taskdef加载ant-cont肋骨,然后我将检查创建'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使用的相同的类加载程序进行检查?
编辑后,奥列格帕夫利夫回答,经过一点吉丁,这是有效的工作。我的问题应该更清楚些。
这在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')发布于 2015-06-05 08:41:34
可能/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>https://stackoverflow.com/questions/30660792
复制相似问题