好久不写ant脚本了,最近两天在用ant做web应用的安装部署脚本,为了实现web服务器的多版本兼容,必然要使用逻辑判断,比如我要判断是安装在weblogic8上还是weblogic9上,而在ant中处理逻辑判断真是麻烦,只能作用于task,要利用property来做判断,使用available来设置property。例如:
<?xml version="1.0" encoding="GB2312"?>
<project name="weblogic ant task" default="build">
<target name="detect.file" >
<condition property="fileIsExists" >
<and>
<available file="c:/123.txt"/>
</and>
</condition>
</target>
<target name="echoDemo" if="fileIsExists" depends="detect.file">
<echo message="hello ant"/>
</target>
<target name="build">
<antcall target="echoDemo"/>
</target>
</project>
上面判断一个文件,如果存在的话 fileIsExists 就为true,echoDemo这个task在执行前会先判断fileIsExists 是否为true如果不为true就不执行了。c盘下面有123.txt的话会打印hello ant 否则不会打印。
这里面还有一个小陷阱,我习惯使用antcall,不喜欢使用depends,但是使用antcall的话就会有问题,例如我最开始这么写的,就不行。
<?xml version="1.0" encoding="GB2312"?>
<project name="weblogic ant task" default="build">
<target name="detect.file">
<condition property="fileIsExists">
<and>
<available file="c:/123.txt"/>
</and>
</condition>
</target>
<target name="echoDemo" if="fileIsExists">
<echo message="hello ant"/>
</target>
<target name="build">
<antcall target="detect.file"/>
<antcall target="echoDemo"/>
</target>
</project>
使用antcall的话在echoDemo这个task执行的时候fileIsExists这个属性永远不为true,即便在执行完detect.file后它已经为true了,但是它不会被传递到下一个task,没用深入研究过ant,所以具体内部实现还不了解。
下面是ant的官方参考文档
更复杂的可以参考
http://ant.apache.org/manual/CoreTasks/conditions.html
Description
Sets a property if a certain condition holds true - this is a generalization of Available and Uptodate.
If the condition holds true, the property value is set to true by default; otherwise, the property is not set. You can set the value to something other than the default by specifying the value
attribute.
Conditions are specified as nested elements, you must specify exactly one condition.
Parameters
Attribute |
Description |
Required |
property |
The name of the property to set. |
Yes |
value |
The value to set the property to. Defaults to "true". |
No |
else |
The value to set the property to if the condition evaluates to false. By default the property will remain unset. Since Ant 1.6.3 |
No |
All conditions to test are specified as nested elements, for a complete list see here.
Examples
<condition property="javamail.complete"> <and> <available classname="javax.activation.DataHandler"/> <available classname="javax.mail.Transport"/> </and> </condition>
sets the property javamail.complete
if both the JavaBeans Activation Framework and JavaMail are available in the classpath.
<condition property="isMacOsButNotMacOsX"> <and> <os family="mac"/> <not> <os family="unix"/> </not> </and> </condition>
sets the property isMacOsButNotMacOsX
if the current operating system is MacOS, but not MacOS X - which Ant considers to be in the Unix family as well.
<condition property="isSunOSonSparc"> <os name="SunOS" arch="sparc"/> </condition>
sets the property isSunOSonSparc
if the current operating system is SunOS and if it is running on a sparc architecture.
分享到:
相关推荐
通过下载并解压“apache-ant-1.10.12-bin.zip”,你可以开始在Java项目中使用Ant进行编译、打包和其他构建任务。理解Ant的基本概念和组件对于任何Java开发者来说都是必要的,因为它可以帮助你有效地管理和自动化项目...
Apache Ant 是一个强大的构建工具,尤其在Java开发领域中广泛使用。它是一个基于Java的工具,设计目的是为了克服传统编译工具如make的局限性,尤其是跨平台的问题。Ant通过XML格式的构建文件(通常命名为build.xml)...
为了在Ant项目中使用这个库,你需要将下载的ant-contrib.jar文件添加到Ant的类路径中,然后就可以在你的构建脚本中自由地使用这些条件语句了。 在解压下载的"ant-contrib"压缩包后,你会看到jar文件和其他可能的...
6. **条件(Condition)**:条件元素允许在Ant构建中进行逻辑判断,如检查文件是否存在、属性是否被设置等。 在“apache-ant-1.5.2”版本中,编译Ant可能涉及到以下步骤: 1. 获取源代码,通常从Apache官方仓库...
7. **脚本支持**:Ant允许在任务中嵌入Java、JavaScript或Groovy等脚本,使得构建过程更灵活,可以执行更复杂的逻辑。 8. **外部资源引用**:在`build.xml`中,可以使用相对路径或绝对路径引用项目中的文件和目录,...
- **条件判断**:使用`<condition>`标签结合`<if>`和`<unless>`标签可以实现条件执行任务。 - **循环结构**:通过`<foreach>`标签可以对一组文件或目录执行相同的操作。 - **扩展任务**:除了内置的任务之外,还可以...
在Ant中,可以通过属性(property)来引用定义好的变量值,也可以设置条件判断(condition)和循环(for、while等)来控制构建过程。这样的配置方式极大地方便了构建过程的管理和维护。 在实际项目中,一个典型的...
8. **脚本支持**:Ant支持使用Java、JavaScript、Groovy等脚本语言编写复杂逻辑。 9. **外部工具集成**:如通过`<exec>`标签调用外部命令行工具,如JUnit进行测试。 10. **Eclipse集成**:在Eclipse中配置Ant,创建...
Ant使用XML来描述项目结构和构建过程,使得构建任务可以在不同的环境中重复执行,无需关心具体的操作系统或开发工具。这个压缩包中包含的`build.xml`文件就是Ant的构建脚本,用于定义构建任务、依赖关系和目标。 1....
4. **条件(Condition)**:Ant提供了一系列条件判断,如文件是否存在、版本比较等,可以决定是否执行某个任务或目标。 二、Ant的使用步骤 1. **创建build.xml**:根据项目需求,编写XML格式的构建文件,定义目标...
- `<condition>`元素可以用于条件判断,只有满足条件时,相关的目标才会被执行。 5. **文件集(Filesets)** - 文件集是一种选择一组文件的方式,它可以应用于许多任务,如编译、复制或删除。 - `<fileset>`元素...
5. **文件集(Fileset)**:文件集是Ant处理文件和目录的一种方式,它可以指定一组文件和目录,然后在任务中使用。文件集可以通过各种条件(如通配符、排除规则等)进行过滤。 6. **路径(Path)**:路径元素用于...
标题中的“分享一个项目的Ant脚本配置”表明我们将探讨的是如何使用Apache Ant工具来构建和管理Java项目。Ant是开源的构建工具,广泛应用于Java项目,它可以自动化编译、打包、测试等开发流程。 在描述中提到的...
《Ant入门加高级查询文档》是一本全面介绍Apache Ant的宝贵资源,涵盖了从基础到高级的各类主题。Ant是Java项目构建系统,它通过XML定义的任务来自动...在Java世界中,熟悉和掌握Ant的使用,对于提升开发效率至关重要。
3. ****: 定义或引用属性,用于存储值并在构建过程中使用。 4. **<condition>**: 判断语句,根据条件执行特定任务。 5. ****: 循环结构,可以遍历列表或集合,对每个元素执行某项操作。 **多渠道打包步骤** 1. **...
Ant支持条件语句,可以在构建过程中基于某些条件执行不同的任务。 ```xml <condition property="os.name" value="Windows"> </condition> ``` ##### 3. Target的条件判断与逻辑 使用`if`和`unless`属性来控制`...
布尔运算符有`and`、`or`和`not`,用于逻辑判断。例如,`10 > 30`的结果是False。 Python的关键字和保留字,如`if`、`while`、`for`、`as`、`import`、`input`、`print`和`range`,在编程时有特定含义,不能作为...
规则绑定允许将规则中的元素与外部数据或上下文关联,而规则表达式则提供了计算和逻辑判断的能力,使规则能够根据运行时的状态动态调整行为。 ### 规则条件与动作 规则条件定义了规则触发的先决条件,而规则动作则...