Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用带有名称空间的antlib的Ant_Java_Ant_Ant Contrib - Fatal编程技术网

Java 使用带有名称空间的antlib的Ant

Java 使用带有名称空间的antlib的Ant,java,ant,ant-contrib,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"> &l

我正在使用以下演示脚本:

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

pathelement
lib/ant-contrib-1.0b3.jar
存在,ant正在提取它。我认为问题在于我如何使用xmlns。我从另一个对我也不起作用的例子(它在一个特定的服务器上工作!)中得出这个结论,并试图找出什么是神奇的调味汁。

好吧,错误在最后出现了
if
,它是关于第9行的。我认为这个标签的语法有问题:

    <deploy:if>

我找不到任何关于“deploy:if”标记甚至“deploy”标记的文档我认为Ant中没有“部署”任务-您需要制定一个“部署”目标

试试这个怎么样:

  <if>
    <isset property="defaultprop"/>
    <then>
      <antcall target="deploy" />
    </then>
  </if>

正如我所读到的,这将检查isset,然后调用“部署”目标(如果已设置)。
当然,您现在需要将“部署”目标设置为:)

您要添加ant contrib的taskdef需要声明一个URI,该URI与您在项目中定义并作为前缀的命名空间相同。与taskdef的工作原理类似



事实上,xmlns看起来有点不合适,您尝试过不使用它吗?其余的看起来还可以。您还可以将taskdef移出target@ChristopheRoussy谢谢你的提问。当我删除
xmlns=…
位和两个
deploy:
s时,这个例子就起作用了。不过,有了这两个位,整个过程都可以在我们现有的服务器上运行,所以我尝试在我的机器上重新创建名称空间版本。您是否尝试过使用
xmlns:ac=“antlib:net.sf.antcontrib”
?如果任务来自ant contrib,OP在taskdef中定义了它,他希望任务位于名称空间前缀“deploy”中。好的,但我不认为他做了什么把它放在那里。很好的回答!您能想出任何不进行此修改就可以成功的方法吗?如果您在项目级别丢弃taskdef中的uri和xmlns声明,那么任务最终将位于默认名称空间中,因此您可以像调用
而不是
一样调用它们。前缀可以很方便地防止名称冲突的东西发生冲突,就像java中的包一样,还可以一目了然地确定某些功能来自何处。我理解这一点,但这个示例有
xmlns
,和
,但没有taskdef的URI…而且它可以工作!!它在我没有完全访问权限的服务器上工作,所以我无法进行仔细调查。
  <if>
    <isset property="defaultprop"/>
    <then>
      <antcall target="deploy" />
    </then>
  </if>
<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>