ant之build.xml详解
来源:互联网 发布:零基础学python张志强 编辑:程序博客网 时间:2024/06/07 07:23
最近项目中用到了ant构建项目,由于之前一直用的maven,没接触过ant,就抽空补了下ant相关知识。下面分三部分介绍ant:
- ant安装
- ant命令
- build.xml配置详解
ant安装
直接上官网下载ant包ant官网,最新包是apache-ant-1.9.4-bin.zip。将其解压到某个目录,我的放置在E:\develop目录下
然后配置环境变量,增加系统变量ANT_HOME,值为ant的解压目录(本机目录为E:\develop\apache-ant-1.9.2,修改系统变量Path,追加%ANT_HOME%\bin。
然后打开cmd窗口,输入命令ant -version。若正常显示ant版本信息,表示安装成功。
ant命令
输入ant -h命令可查看帮助文档如下:
ant [options] [target [target2 [target3] ...]]Options: -help, -h print this message -projecthelp, -p print project help information ……
选项有很多,下面说明常用的几个选项。
-projecthelp, -p 打印项目帮助信息-buildfile <file> 指定buildfile文件名(默认在当前目录下查找build.xml)-file <file> 同上-f <file> 同上-lib <path> 指定类路径
[target]不指定时,会执行buildfile中的默认target
build.xml配置详解
build.xml就是一个XML文件,它包含一个project节点和至少一个target节点,target节点包含多个task元素。简单说,target节点代表着你的构建目标,而该目标是由多个操作/任务(task)来达成的。
文字描述比较枯燥,下面以简单的java项目为例,说明如何通过ant发布jar包。
在eclipse中新建一个java项目,结构如下
HelloAnt.java内容为:
package com.tq.ant;import org.apache.commons.lang.StringUtils;/** * @version 1.0 * @author tangqian */public class HelloAnt { public boolean isBlank(String str){ return StringUtils.isBlank(str); } public static void main(String[] args) { System.out.println("Hello ant!"); }}
其中成员方法isBlank引用到commons-lang-2.5.jar中StringUtils.isBlank()方法。
jdbc.properties包含数据库连接配置信息如下:
driverClassName=com.mysql.jdbc.Driverdb.mysql.url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8db.mysql.username=rootdb.mysql.password=root
该项目通过ant打包发布,build.xml包含内容如下
<?xml version="1.0" encoding="UTF-8" standalone="no"?><project basedir="." default="build" name="ant_test"> <property name="lib" value="E:/workspace/bi_mr_STB/lib" /> <path id="ant_test.classpath"> <pathelement location="bin" /> <pathelement location="${lib}/commons-lang-2.5.jar" /> </path> <target name="init"> <mkdir dir="bin" /> <copy includeemptydirs="false" todir="bin"> <fileset dir="src"> <exclude name="**/*.java" /> </fileset> </copy> </target> <target depends="init" name="build"> <echo message="${ant.project.name}: ${ant.file}" file="www.txt" /> <javac destdir="bin" debug="true" includeantruntime="false"> <src path="src" /> <classpath refid="ant_test.classpath" /> </javac> </target> <target depends="build" name="dist"> <jar destfile="hello-ant.jar" basedir="bin"> <manifest> <attribute name="Main-Class" value="com.tq.ant.HelloAnt" /> </manifest> </jar> </target> <target name="clean"> <delete dir="bin" /> <delete file="hello-ant.jar" /> </target></project>
下面详解各节点及属性含义:
project
根节点,代表一个工程
属性说明:
name 表示工程名称
basedir 表示基准目录(值为”.”代表当前目录,即build.xml所在目录,也可采用绝对路径)
default 表示默认运行的target(当ant命令没有指定target时,会运行default属性中的target)
target
目标节点,代表着一个构建目标
属性说明:
name 表示目标名称
depends 表示依赖的target。像上例中,dist依赖build,build依赖init,也就是说,当ant运行dist这个target时,会根据依赖关系先运行build,build又会先运行init,各个target的执行次序是init->build->dist。即逻辑上的先执行初始化操作,然后进行源代码编译,最后将class文件打成jar包的过程。
property
设置一个或多个属性(可以在其它地方通过${属性名}进行引用)
属性说明:
name 表示属性名(区分大小写)
value 表示属性值
file 表示要加载的属性文件路径(该文件可包含多个属性,类似jdbc.properties的内容)
下面接着说明各个target中tasks含义
mkdir
创建目录属性说明:dir 表示要创建目录
delete
删除目录或文件属性说明:dir 表示要删除的目录,该目录下的文件和子目录都会被删除file 表示要删除的文件
echo
向屏幕或文件输出信息属性说明:message 表示要输出的信息file 表示信息输出到该文件中(如果指定了该属性,信息将不会在屏幕上显示)level 表示信息级别(未指定该属性时的默认级别为"warning")
copy
拷贝文件或目录属性说明:todir 表示拷贝到哪个目录下includeemptydirs 是否拷贝空目录file 要拷贝的单个文件(只针对单个文件的拷贝,上例中没有指定该属性,而是通过内嵌<fileset>来指定多个文件)
javac
编译源文件属性说明:srcdir 源文件路径(多个源之间用:分隔,可通过内嵌<src>元素进行设定,如上例)destdir 存放编译后的class文件路径includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的.java文件被包含进去excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。debug 编译时是否显示调试信息includeantruntime 是否包含ant库路径classpath 依赖库路径(上例中通过内嵌<classpath>元素进行了设定)
jar
将class文件打成jar包属性说明:destfile 将创建的jar包位置basedir 将被打成jar包的目录(或通过内嵌的<fileset>元素进行设定)includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。可内嵌<manifest>元素,通过设定Main-Class属性来设定jar包的入口类(如上例)
Resource Collections
ant中经常需要指定资源集合,主要通过下面元素指定
fileset
属性说明:dir 文件集合的根目录(该目录下的文件都会被包含)file 快捷指定单个文件includes 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去excludes 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。casesensitive 指定包含或排除模式匹配时是否区分大小写,默认区分可内嵌<include>、<exclude>、<patternset>、<filename>等元素
patternset
模式集合属性说明:id 唯一标识(其它<patternset>元素通过refid指向该模式)可内嵌<include>、<exclude>、<includesfile>、<excludesfile>等元素
include
exclude
指定单个模式(包含或排除)属性说明:name 要包含或排除的模式
includesfile
excludesfile
指定模式文件属性说明:name 模式文件名(文件内容为包含或排除模式)
Path-like Structures
在通过ant运行java类,或执行编译时,都需要指定classpath,可通过下面三个元素来指定引用的jar包或class文件
classpath
类路径,内嵌在<javac>,<java>等元素中,表示依赖库路径属性说明:refid 指向该id对应的元素location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}其它说明:可内嵌<fileset>、<pathelement>等元素来指定jar文件或目录
path
类路径集合,被<classpath>或其它<path>引用。path用法类似<classpath>元素,但是<path>跟<target>同级,而classpath是内嵌在<java>或<javac>元素中。
pathelement
单个类路径,内嵌在<classpath>或<path>中属性说明location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)path 多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解 .
- Ant 之 build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- Ant之build.xml详解
- 添加复位键按钮
- mysql root用户的密码修改和消除
- Android 多图片情况下,发生内存溢出的解决办法
- 堆排序
- 写存储过程
- ant之build.xml详解
- NSString属性什么时候用copy,什么时候用strong?
- Linux常用命令大全
- JS CSS 仿触屏手机拨号盘界面及功能模拟
- Oracle数据库的关键字
- zookeeper的集群模式下的安装和配置
- Scroller的使用
- 最短编辑距离
- SAMPLE SCRIPT TO CREATE SALES ORDER USING OE_ORDER_PUB.PROCESS_ORDER