ant 打包
ant生成文件的根元素是<project…/>,每个项目下可以定义多个生成目标,每个生成目标以<target…/>元素来定义,它是<project…/>元素的子元素被引用。几乎所有ant元素都有的属性是
<?xml version="1.0" encoding="UTF-8"?>
<project basedir = "." name = "test" default = "deploy">
<target name = "deploy">
<property name = "outputDir" value = "../edatabi-site/WebContent/WEB-INF/lib"></property>
<property name = "tomcatLib" value = "C:/web_soft/tomcat7Lib/lib"></property>
<property name="bundle-file" value="${outputDir}"></property>
<path>
<pathelement>
</pathelement>
<dirset>
</dirset>
<filelist>
</filelist>
<fileset>
</fileset>
</path>
</target>
</project>
一.project的常见属性含义如下
属性 | 说明 | 是否必须 |
---|---|---|
name | 指定项目名,该属性只指定一个名称,对编译生成项目没有多大意义 | 否 |
descriptin | 项目的描述信息,对编译生成项目没有多大意义 | 否 |
basedir | 指定ant打包基准路径,打包生成的文件都是基于该基准路径(如basedir = "."表示基准路径是bulid.xml该文件的路径) | 否 |
default | 指定默认的target,这个属性是必须的,如当没有target支持时如(default="" 这个时候你ant 打包builde.xml 则会跳出所有target 给你选择编译哪个),缺省使用的all | 是 |
二.target的常见属性含义如下
属性 | 说明 | 是否必须 |
---|---|---|
name | 指定该target的名称,该属性是必须的。该属性非常重要,如果希望ant运行指定的生成目标时,就是要根据该name来确定生成目标的。因此可以得到同一个project下的不能有两个同名的target | 元素 是 |
depends | 该属性可指定一个或多个target名,表示运行该target之前应先运行该depends属性所指定的一个或多个target | 否 |
if | 该属性指定一个属性名,用属性表示仅当设置了该属性时才执行该target | 否 |
unless | 该属性指定一个属性名,用属性表示仅当没有设置了该属性时才执行该target | 是 |
descriptin | 描述信息,对编译生成项目没有多大意义 | 否 |
target除了上面常见元素之外,还有两个重要子元素<property…/> 和<path…/>
1.<property…/> 元素是用于定义常量,相当于编程语言里面的宏变量一样。它们都有名称和值,与编程语言不同的是,Ant生成文件中的属性值不可以改变。如:
<property name = "outputDir" value = "../edatabi-site/WebContent/WEB-INF/lib"></property>
当需要获取属性值,需要使用${propName}
<property name="bundle-file" value="${outputDir}"></property>
2.<path…/>元素,用于定义衣蛾独立的,有名称的文件和路径集,用于被引用。
<path…/>元素和<classpath…/>元素区别:
<classpath…/>元素通常作为其它任务的子元素,既可引用已有的文件和路径集,也可以定义一个文件和路径集。而<path…/>元素则作为 <property…/>元素的子元素,用于定义一个独立的,有名称的文件和路径集,用于被引用。。
3.<path…/>元素和<classpath…/>元素,都用于收定义文件和路径集,这两个元素可接受如下子元素:
3.1 <pathelement…/>:用于指定一个或多个目录。<pathelement…/>:用于指定如下两个属性中的一个。
3.1.1 .path:指定一个目录或者多个目录(或者jar文件),多个目录或者jar文件之间以英文冒号( : ),或者英文分号( ; )分开。
3.1.2 .location:指定一个目录或者jar文件。
3.2 <dirset…/>:采用模式字符串的形式指定系列目录,如果需要指定多个路径集,可以使用到<dirset…/>,该元素需要使用dir属性,还可以使用<include…/>和<exclude…/>两个子元素来指定包含和不包含哪些目录。
3.3 <fileset…/>:采用模式字符串的形式指定系列文件,可指定如下两个属性,<fileset…/>元素还可以用<include…/>和<exclude…/>两个子元素来指定包含和不包含哪些文件
3.3.1 dir:指定文件集里多个文件所在的基准路径。这是一个必须属性
3.3.2 casesensitive:指定是否区分大小写。默认区分大小写
3.4 <filelist…/>:用于直接列出系列文件名的方式指定系列文件,可指定如下两个属性
3.4.1 dir : 指定文件集里多个文件所在的基准路径。这是一个必须属性
3.4.2 files: 多个文件名列表,多个文件名之间以英文逗号(,)或空白隔开。
<?xml version="1.0" encoding="UTF-8"?>
<project basedir = "." name = "test" default = "deploy">
<target name = "deploy">
<property name = "outputDir" value = "../edatabi-site/WebContent/WEB-INF/lib"></property>
<property name = "tomcatLib" value = "C:/web_soft/tomcat7Lib/lib"></property>
<property name="bundle-file" value="${outputDir}"></property>
<path id = "classpath">
<pathelement location = "./test/v">
</pathelement>
<dirset dir = "./test">
<include name = "a/**/c"></include>
</dirset>
<filelist dir = "${outputDir}" files = "fastjson-1.2.5.jar">
</filelist >
<fileset dir = "${outputDir}">
<include name = "commons-lang3-*.jar"/>
</fileset>
</path>
</target>
</project>
三.常见的核心task和可选task
target元素核心就是task和可选task,即每个<target…/>由一个或多个task组成。这里我们只看核心的task和可选的task。
1.javac :用于编译一个或多个java源文件,通常需要srcdir和destdir两个属性,用于指定源文件的位置和编译后class文件的保存位置。
2.java:用于运行某个Java类,通常需要classname属性,用于指定运行哪个类。
3.jar:用于生成jar包,通常需要指定destfile属性,用于指定创建JAR包的文件名。除此之外,通常还应指定一个文件集,表明需要将哪些文件打包到JAR包里,manifest属性指定MANIFEST.MF文件,还可以包括<manifest…/>子属性MANIFEST.MF文件内容。
4.sql:用于执行一条或多条SQL语句。
5.echo:输出某个字符串。
6.exec:执行操作系统的特定命令,通常需要executable属性,用于指定想执行的命令。
7.copydir:用于复制文件目录 dest 目标文件夹下(没有会自动生成),src源文件夹。
8.delete:用于删除文件或路径 file 或者 dir。
9.mkdir:用于创建文件夹。
10.move:用户移动文件或路径。
<?xml version="1.0" encoding="UTF-8"?>
<project basedir = "." name = "test" default = "deploy">
<target name = "deploy">
<property name = "outputDir" value = "../edatabi-site/WebContent/WEB-INF/lib"></property>
<property name = "tomcatLib" value = "C:/web_soft/tomcat7Lib/lib"></property>
<property name = "tempPath" value = "C:/antTemp/${ant.project.name}"></property>
<property name="jar-version" value="1.0"></property>
<property name="jar-file" value="${outputDir}/${ant.project.name}-${jar-version}.jar"></property>
<path id = "classpath">
<fileset dir = "${outputDir}">
<include name = "commons-lang3-*.jar"/>
<include name = "fastjson-*.jar"/>
</fileset>
<fileset dir = "${tomcatLib}">
<include name = "*.jar"/>
</fileset>
</path>
<mkdir dir = "${tempPath}"></mkdir>
<javac srcdir = "./src" destdir = "${tempPath}">
<classpath refid = "classpath"></classpath>
</javac>
<copydir dest ="${tempPath}/META-INF" src = "./META-INF"></copydir>
<jar destfile="${jar-file}" manifest="${tempPath}/META-INF/MANIFEST.MF">
<fileset dir="${tempPath}" includes="**/*.*" />
<manifest>
<attribute name="Resources-Path" value="${basedir}/META-INF"/>
</manifest>
</jar>
<delete dir = "${tempPath}">
</delete>
</target>
</project>