Ant使用antlib与命名空间

时间:2013-02-28 16:58:24

标签: java ant ant-contrib

我使用以下演示脚本:

<?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。我从另一个我不熟悉的例子中得到这个(虽然它可以在特定的服务器上运行!),并试图弄清楚魔法酱是什么。

2 个答案:

答案 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”目标(如果已设置)。 当然,您现在需要制作“部署”目标:)