我正在尝试使用以下内容检查ant中是否存在属性:
<target name="test">
<property name="testproperty" value="1234567890"/>
<if>
<isset property="testproperty"/>
<then>
<echo message="testproperty exists"/>
</then>
<else>
<echo message="testproperty does not exist"/>
</else>
</if>
</target>
结果是消息失败:
build.xml:536: Problem: failed to create task or type if
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
我必须对isset做错事,因为以下顺利运行:
<target name="test">
<property name="testproperty" value="1234567890"/>
<echo message="'${testproperty}'"/>
</target>
请建议:)
答案 0 :(得分:9)
if任务不是标准的ANT任务。这就是目标的条件执行如何工作
<project name="demo" default="test">
<target name="property-exists" if="testproperty">
<echo message="testproperty exists"/>
</target>
<target name="property-no-exists" unless="testproperty">
<echo message="testproperty does not exist"/>
</target>
<target name="test" depends="property-exists,property-no-exists">
</target>
</project>
答案 1 :(得分:7)
显然我错过了可以在这里找到的ant-contrib jar文件:
http://ant-contrib.sourceforge.net/
答案 2 :(得分:3)
您找到了丢失的jar,现在您需要定义使用该jar的任务。我会把jar放在项目中的antlib/antcontrib
目录下。这样,下载项目的其他人将拥有所需的jar。
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<fileset dir="${basedir}/antlib/antcontrib"/>
</classpath>
</taskdef>
如果您使用大量可选的jar文件,则可能需要使用名称空间:
<project name="..." basedir="." default="...."
xmlns:ac="antlib://net/sf/antcontrib">
<taskdef resource="net/sf/antcontrib/antlib.xml"
uri="antlib://net/sf/antcontrib">
<classpath>
<fileset dir="${basedir}/antlib/antcontrib"/>
</classpath>
</taskdef>
现在,当您使用antcontrib任务时,您必须在其前面添加ac:
。这允许在没有命名空间冲突的情况下使用可选的jar。
<target name="test">
<property name="testproperty" value="1234567890"/>
<ac:if>
<isset property="testproperty"/>
<then>
<echo message="testproperty exists"/>
</then>
<else>
<echo message="testproperty does not exist"/>
</else>
</ac:if>
</target>