我使用以下演示脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" basedir="." xmlns:deploy="antlib:net.sf.antcontrib">
<target name="default">
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<deploy:if>
<isset property="defaultprop"/>
<then>
<echo message="it's set!"/>
</then>
</deploy:if>
</target>
</project>
当我运行此构建脚本(目标为default
)时,错误为
build.xml:9: Problem: failed to create task or type antlib:net.sf.antcontrib:if
该问题lib/ant-contrib-1.0b3.jar
存在,而蚂蚁正在捡起它。我在想问题是我如何使用xmlns。我从另一个我不熟悉的例子中得到这个(虽然它可以在特定的服务器上运行!),并试图弄清楚魔法酱是什么。
答案 0 :(得分:9)
您在taskdef中添加ant-contrib需要声明一个URI,与您在项目中定义的名称空间和前缀相同。与taskdef over here的工作方式类似。
<project name="test" basedir="." xmlns:deploy="antlib:net.sf.antcontrib">
<target name="default">
<taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<deploy:if>
<isset property="defaultprop"/>
<then>
<echo message="it's set!"/>
</then>
</deploy:if>
</target>
</project>
答案 1 :(得分:0)
嗯,错误最后有if
,它正在谈论第9行。我认为这个标签的语法有问题:
<deploy:if>
我找不到关于“deploy:if”标记或甚至“部署”标记的任何文档。 我认为Ant中没有'部署'任务 - 你需要制作一个'部署'目标 。
尝试这个怎么样:
<if>
<isset property="defaultprop"/>
<then>
<antcall target="deploy" />
</then>
</if>
当我读到它时,这将检查isset,然后调用“deploy”目标(如果已设置)。 当然,您现在需要制作“部署”目标:)