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>