ant 脚本 available 及条件判断功能

1. 通过<available property="属性名"  file | classname | resource = "被判定是否存在的东西"  value="给属性名显示指定一个值" ..... /> 存在性判断语句,如果判定的东西存在,则以默认值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,否则不设置该属性,此处设测试值xxxxx
22      -->
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                 pathelement
72                     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>
时间: 2024-10-12 03:09:48

ant 脚本 available 及条件判断功能的相关文章

bash脚本编程之条件判断、条件测试

脚本编程: 编程面向过程有如下几种执行方式 顺序执行 选择执行:  如 if, case 循环执行:  如 for, while, until bash的变量类型: 本地变量 set VAR_NAME=value 设置变量赋值 如: set User=Centos unset VAR_NAME 撤消变量赋值 如: unset User=Centos ${VAR_NAME} 作用范围:当前shell进程: 局部变量 local VAR_NAME=value 设置变量赋值 unset VAR_NAM

shell脚本编程:条件判断if语句使用小结

shell脚本编程,有三种控制结构分别是:顺序结构,条件判断结构,循环结构.本文将总结shell脚本中条件判断结构的使用方法. 条件判断结构分为三种,单分支,双分支,多分支,等结构. 单分支结构的语法如下: if [ expression  ] ;then statement1 statement2 ......... fi 双分支语法结构: if [ expression ];then statement1 statement2 ..... else statement3 statement4

Linuxshell脚本之if条件判断

IF条件判断 1.基本语法:if [ command ]; then符合该条件执行的语句fi2.扩展语法:if [ command ];then符合该条件执行的语句elif [ command ];then符合该条件执行的语句else符合该条件执行的语句fi 3.语法说明:bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令.当有多个嵌套时,只有第一个返回0退出状态的命令会导致符合该条件执行的语句

linux 笔记--扩展正则表达式,bash脚本—变量,条件判断,算术运算

正则表达式:有两类,一:basic regexp  二:extended(扩展正则表达式)  他们的部分元字符不一样,意义也不相同 grep:使用基本正则表达式或定义的模式中过滤文本的命令,-E;使用扩展正则表达式  -A 数字:不仅显示匹配到的行,还显示后面几行  -B 数字:不仅显示匹配到的行,还显示前几行  -C 数字:不仅显示匹配到的行,还显示前后个几行 扩展正则表达式: 其中 . [] [^] * ^ $ \< \>与grep是相同的, ? 与 \?:意思相同,可以不写\  +:其前

bash脚本编程之三 条件判断及算术运算

练习:写一个脚本,完成以下任务 1.添加5个用户,user1,--,user5 2.每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息 3.每个用户添加完成后,都要显示用户某某已经成功添加 !id user1  &>/etc/null && useradd user1 && echo "user1 " | passwd --stdin user1  &> /etc/null &&

Linux shell脚本之 if条件判断

IF条件判断 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 else 符合该条件执行的语句 fi 3.语法说明: bash shell会按顺序执行if语句,如果command执行后且它的返回状态是0,则会执行符合该条件执行的语句,否则后面的命令不执行,跳到下一条命令. 当有多个嵌套时,只有第一个返回0退出状态的命令

bash脚本编程之一 条件判断and 逻辑运算

1.条件测试结构 1) if/then结构: 判断命令列表的退出码是否为0,0为成功. 如果if和then在条件判断的同一行上的话, 必须使用分号来结束if表达式: if和then都是关键字. 关键字(或者命令)如果作为表达式的开头, 并且如果想在同一行上再写一个新的表达式的话, 那么必须使用分号来结束上一句表达式. if [ condition1 ] then     command1     command2     command3 elif [ condition2 ] then # 与

bash脚本编程之条件判断

1.bash脚本编程格式: 顶格写#!/bin/bash 接下来给出一些注释信息,以#开头如: #description #version #auhor ceshi <[email protected]> #date 2017-11-07 然后代码注释 缩进,适度添加空白行 2.变量介绍: 局部变量 本地变量 环境变量 位置参数变量 特殊变量 3.数据类型: 字符型 数值型 4.bash算数运算: 方法①:let var=$num1 op $num2 方法②:var=$[ expression

bash 脚本编程3 条件判断和算术运算 (笔记)

小练习:  写一个脚本 判断系统上是否有用户的默认shell 是 bash的 如果有的话就显示有多少这样的用户 否则就显示无此类用户 #!/bin/bash#grep "bash$" /etc/passwd &> /devnullCODE=$? if [ $CODE -eq 0  ]; then        USERNU=`grep "bash$" /etc/passwd | wc -l `        echo "The number