首页 > 代码库 > ant 脚本 available 及条件判断功能
ant 脚本 available 及条件判断功能
1. 通过<available property="属性名" file | classname | resource = "被判定是否存在的东西" value="http://www.mamicode.com/给属性名显示指定一个值" ..... /> 存在性判断语句,如果判定的东西存在,则以默认值true/或指定的属性值设置指定的属性;若判定的东西不存在,则不设置该属性。
我们可以根据这个属性是否被设置(通过<isset property="属性名" />判断)、这个属性已被设置的值(<equals arg1="${属性名}" arg2="true|指定的属性值">),执行 if - then - else 判断逻辑。
1 <project name="test" basedir="." default="copy"> 2 3 <!-- 4 为了使用ant的 if [isset] - then - else 功能,定义任务,并将其引入urn:contrib-ant命名空间 5 --> 6 7 <taskdef resource="net/sf/antcontrib/antcontrib.properties" uri="urn:contrib-ant"> 8 <classpath> 9 <pathelement location="D:\osesbinaction\libraries\ant-contrib\lib\ant-contrib.jar" />10 </classpath>11 </taskdef>12 <!-- 13 Sets a property if a resource is available at runtime. 14 在运行时,如果一个资源(文件、目录、类、JVM系统资源等)可以得到,15 就设置一个属性,其属性值默认设为true,否则不设置16 This resource can be a file, a directory, a class in the classpath, or a JVM system resource.17 If the resource is present, the property value is set to true by default; otherwise, the property is not set. 18 You can set the value to something other than the default by specifying the value attribute.19 除了默认值,你还能够通过指定value属性,设置为其他值20 21 如果./test/target/test-1.0.jar存在,则设置属性test.exist,并让其取默认值true,否则不设置该属性,此处设测试值xxxxx22 -->23 <available property="test.exist" file="test-1.0.jar" filepath="./test/target" value="xxxxx"/>24 25 26 <target name="copy" description="Test Copy" xmlns:c="urn:contrib-ant">27 <c:if>28 <!-- 29 如果当前上下文中存在test.exit属性,则返回true,则返回false 30 31 <c:equals arg1="${test.exist}" arg2="xxxxx" /> 可完成相同判断功能32 -->33 <c:isset property="test.exist" />34 35 <c:then>36 <!-- 如果存在test.exit属性,则拷贝到test/libdb目录 -->37 <copy todir="test/libdb" preservelastmodified="true">38 <fileset dir="test/target">39 <include name="test-1.0.jar" />40 </fileset>41 </copy>42 <echo>属性test.exist的值为: ${test.exist}</echo>43 </c:then>44 45 <c:else>46 <!-- 如果不存在test.exit属性,则拷贝到test/libdb目录 -->47 <echo>./test/target/test-1.0.jar文件不存在,无法进行拷贝</echo>48 </c:else>49 </c:if>50 </target>51 52 <path id="runtime.path">53 <fileset dir="../resources">54 <include name="**/*.jar" />55 </fileset>56 </path>57 58 <target name="test-available" description="a test of the task available">59 60 <!-- 如果在runtime.path引用的类路径中存在esb.chapter3.Person类,则设person.class.present属性为exist -->61 <available classname="esb.chapter3.Person" 62 property="person.class.present"63 classpathref="runtime.path" value="exist"/>64 <echo>${person.class.present}</echo>65 66 <property name="workspace.home" value="D:/eclipse-luna-jee/workspace/z_servicemix" />67 <available classname="esb.chapter3.Order" property="order.exist">68 <classpath>69 <path refid="runtime.path" />70 <!-- 71 pathelement72 location属性,接收一个文件或目录73 path属性,功能相当于一个内嵌的<path>元素,使用起来比较随意,接收一个分号分隔的位置列表74 注: location和path属性一般可以通用,当涉及到一个分号分隔的位置列表时,只能用path属性75 -->76 <pathelement location="D:\osesbinaction\libraries\ant-contrib\lib\ant-contrib.jar" />77 <pathelement location="${workspace.home}/resources" />78 <pathelement path="${workspace.home}/src:${workspace.home}/bin" />79 </classpath>80 </available>81 <echo>${order.exist}</echo>82 83 <!-- 如果./lib/jaxp11/jaxp.jar文件存在,设jaxp.jar.present属性为true -->84 <property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>85 <available file="${jaxp.jar}" property="jaxp.jar.present"/>86 87 <!-- 如果/usr/local/lib目录存在,设local.lib.present属性为true -->88 <available file="/usr/local/lib" type="dir" property="local.lib.present"/>89 90 <!-- 如果xxx\lib\ant-contrib.jar包中存在net/sf/antcontrib/antcontrib.properties资源文件,设have.res属性为true -->91 <available property="have.res" resource="net/sf/antcontrib/antcontrib.properties">92 <classpath>93 <pathelement location="D:\osesbinaction\libraries\ant-contrib\lib\ant-contrib.jar" />94 </classpath>95 </available>96 <echo>have.extras = ${have.res}</echo>97 </target>98 </project>
2. 也可通往<condition property="属性名" />, <target name="target1" if | unless ="属性名" /> 完成判断分支功能
1 <project name="test" basedir="." default="copy"> 2 3 <target name="copy"> 4 <condition property="test.exist"> 5 <and> 6 <available file="test-1.0.jar" filepath="test/target" /> 7 </and> 8 </condition> 9 <!-- 下面的2个任务都尝试执行,但只有测试条件通过的任务体才会被执行 -->10 <antcall target="copy-target" />11 <antcall target="echoUnexiting" />12 </target>13 14 <target name="copy-target" if="test.exist" description="Test Copy">15 <copy todir="test/libdb" preservelastmodified="true">16 <fileset dir="test/target">17 <include name="test-1.0.jar"/>18 </fileset>19 </copy>20 </target>21 22 <target name="echoUnexiting" unless="test.exist">23 <echo>./test/target/test-1.0.jar文件不存在,无法进行拷贝</echo>24 </target>25 </project>
ant 脚本 available 及条件判断功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。