- 浏览: 180058 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (186)
- Ant (11)
- Axis2 (15)
- Car (9)
- Eclipse (1)
- Java (19)
- Java-EM (4)
- Javascript (11)
- Jsp (1)
- Hibernate (9)
- Mysql (1)
- Ms-Dos (5)
- Music (0)
- Oracle (3)
- Postgresql (0)
- Photoshop (1)
- Spring (17)
- Struts (8)
- Selenium (5)
- Ubuntu (13)
- News (17)
- Others (7)
- SSH (11)
- 算法 (5)
- FreeMarker (4)
- Tomcat (2)
- Linux (5)
最新评论
转自 :李飞虎 blog :http://hi.baidu.com/annleecn/blog/category/ant%2Clog4j%2Cjunit
1,ant介绍
ant构建工具,我们能用到的多是它的编译,拷贝,复制,运行命令等功能.
ant的好处:1,跨平台,因为ant是使用java实现的;2,使用简单;3,语法清晰;4,功能强大.
ant做的很多事情,大部分是曾经一个叫make的工具所做的,make更多应用于c/c+ +;ant更多应用于java.
2,ant安装
到ant官方网站(http://ant.apache.org)上下载ant,我使用的是1.7.1.下载解压后,增加环境变量:
ANT_HOME:C:\TDDOWNLOAD\apache-ant-1.7.1
在path环境变量中加入ant的bin目录:%ANT_HOME%\bin
如果要让ant能支持JUnit,需要将JUnit的JUnit.jar放置在ant的lib目录,并记得改变CLASSPATH中原先有关于JUnt的设定,如:%ANT_HOME%\lib\junit.jar
cmd进入命令行界面,运行ant命令,可以测试是否安装成功
3,第一个ant脚本
3.1,用文本编写一个HelloWorld.java程序,代码如下:
package test.ant;
public class HelloWorld{
public static void main(String[] args){
System.out.println("hello world!");
}
}
3.2,用ant完成编译和运行
建立一个build.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello1.jar"/>
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
<target name="clean">
<delete dir="${dest}"/>
<delete dir="${hello_jar}"/>
</target>
<target name="rerun" depends="clean,run">
<ant target="clean"/>
<ant target="run"/>
</target>
</project>
3.3,解释上面的配置文件
<?xml version="1.0" encoding="UTF-8" ?>,指定一下版本号和编码方式,几乎所有的XML文件的第一行都是这样.
<project name="HelloWorld" default="run" basedir=".">,ant的所有内容必须包含在project元素里面,basedir是工作的根目录,default是默认要做的事.
<property name="src" value="src"/>,指定变量
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>,要运行的一个命令,depends是它所依赖的target,在执行前先检查depends是否被执行过,如果执行过则直接执行name的命令,否则先执行depends
的命令.
3.4,运行ant
新建一个文件夹,把HelloWorld.java文件放进去,在命令行进入build.xml文件所在的目录,再运行命令:ant;可以看到run命令以及它所依赖的命令都执行了一次.
如果只想执行某个命令,而不是默认命令,如执行build命令,则可以用:ant build;即格式为:ant + target name
4,整合多个build.xml文件的命令
在实际的工作过程中,可能会有一个项目分成很多个模块,每个模块因为由不同的人员负责,因此他们也写了build.xml文件,并且内容各不相同,这时要把它们整合到一起使用,这时有两个选择:
1,重新写一个build.xml;
2,利用他们已经写好的build.xml文件,进行整合.
例如,有三个小组,每个小组都有一个src文件夹和build.xml文件.这个时候可以建立三个文件夹src1,src2,src3,分别把他们的src和build放进去,然后写一个build.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="main" default="build" basedir=".">
<property name="bin" value="${basedir}\bin"/>
<property name="src1" value="${basedir}\src1"/>
<property name="src2" value="${basedir}\src2"/>
<property name="src3" value="${basedir}\src3"/>
<target name="init">
<mkdir dir="${bin}"/>
</target>
<target name="run">
<ant dir="${src1}" target="run"/>
<ant dir="${src2}" target="run"/>
<ant dir="${src3}" target="run"/>
</target>
<target name="clean">
<ant dir="${src1}" target="clean"/>
<ant dir="${src2}" target="clean"/>
<ant dir="${src3}" target="clean"/>
</target>
<target name="build" depends="init,call">
<copy todir="${bin}">
<fileset dir="${src1}">
<include name="*.jar"/>
</fileset>
<fileset dir="${src2}">
<include name="*.jar"/>
</fileset>
<fileset dir="${src3}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<target name="rebuild" depend="build,clean">
<ant target="clean"/>
<ant target="build"/>
</target>
</project>
OK,以上build.xml文件整合了三个build.xml子文件.
5,ant高级应用
property和xml include可以所build.xml中<property/>中的内容分离出来,共同使用,它们的优点如下:
property:维护简单,键值对容易记住;
xml include:不单可以提取出属性来,连target也可以
还是上面的例子,如果我想把src1,src2,src3这三个属性从xml中提取出来,可以新建一个文件all.properties,内容如下:
src1=D:\\study\\ant\\src1
src2=D:\\study\\ant\\src2
src3=D:\\study\\ant\\src3
然后,build.xml文件可以这样按下面的内容写,别人只需要更改配置文件,而不需要更改build.xml文件了.
<?xml version="1.0" encoding="UTF-8" ?>
<project name="main" default="build" basedir=".">
<property name="file" value="all.properties"/>
<property name="bin" value="${basedir}\bin"/>
<target name="init">
<mkdir dir="${bin}"/>
</target>
<target name="run">
<ant dir="${src1}" target="run"/>
<ant dir="${src2}" target="run"/>
<ant dir="${src3}" target="run"/>
</target>
<target name="clean">
<ant dir="${src1}" target="clean"/>
<ant dir="${src2}" target="clean"/>
<ant dir="${src3}" target="clean"/>
</target>
<target name="build" depends="init,call">
<copy todir="${bin}">
<fileset dir="${src1}">
<include name="*.jar"/>
</fileset>
<fileset dir="${src2}">
<include name="*.jar"/>
</fileset>
<fileset dir="${src3}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
<target name="rebuild" depend="build,clean">
<ant target="clean"/>
<ant target="build"/>
</target>
<target name="test">
<ant dir="${src1}" target="test"/>
<ant dir="${src2}" target="test"/>
<ant dir="${src3}" target="test"/>
</target>
</project>
有时候又想给每个小组的build.xml加入几个target,一种做法是在每个小组的build.xml中加上target,然后在总的build.xml文件中调用,但有种更好的办法.可以写一个include.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<target name="test">
<ant target="run"/>
</target>
然后更改小组的build.xml文件,在文件头加上以下内容:
<!-- include a xml file , it can be common on property , can be also a target -->
<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../include.xml">
]>
&share-variable;
这个时候,只要在include.xml中添加property,target,子build.xml会同时添加这些property和target,而且不会让子build.xml变得更复杂.
添加后的build.xml文件内容如下:
6.ant常用命令
6.1,设置和使用classpath
设置代码如下:
<classpath id="project.class.path">
<pathelement path="${classpath}"/>
<fileset dir="lib">
<include name="**/*.jar"/>
</fileset>
<pathelement location="classes"/>
<dirset dir="build">
<include name="apps/**/classes"/>
<exclude name="apps/**/*Test*"/>
</dirset>
<filelist refid="third-party_jars"/>
</classpath>
使用代码如下:
<target>
<javac>
<classpath refid="project.class.path"/>
</javac>
</target>
6.2,输出信息
输出信息有两种写法:
1,<echo message="xxxx"/>
2,<echo>xxxx</echo>
输出一段XML
<echoxml file="subbuild.xml">
<project default="ann">
<target name="ann">
<echo>ann</echo>
</target>
</project>
</echoxml>
6.3,引入一个XML文件
<import file="../common-targets.xml"/>
6.4,拷贝和删除文件,目录
拷贝一个文件:
<copy file="myfile.txt" fofile="mycopy.txt"/>
拷贝一个文件到指定目录:
<copy file="myfile.txt" todir"../some/other/dir"/>
拷贝一个目录到另一个目录:
<copy todir="../new/dir">
<fileset dir="src_dir"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
或
<copy todir="../dest/dir"
<fileset dir="src_dir" excludes="**/*.java"/>
</copy>
拷贝一个文件集合到一个目录,同时建立备份文件:
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<globmapper from="*" to="*.bak"/>
</copy>
拷贝一个集合的文件到一个目录,并替换掉@TITLE@
<copy todir="../backup/dir">
<fileset dir="src_dir"/>
<filterset>
<filter token="TITLE" value="Ann Lee"/>
</filterset>
</copy>
拷贝一个目录下的东西到另一个目录下
<copydir src="${src}/resources" dest="${dest}" includes="**/*.java" excludes="**/Test.java"/>
拷贝一个文件
<copyfile src="Test.java" dest="subdir/Test.java"/>
删除文件,目录,(拷贝中各种关于目录的操作也可以用在这里)
删除一个文件
<delete file="/lib/ant.jar"/>
删除一个目录
<delete dir="lib"/>
删除所有符合规则的文件(.bak文件)包括子目录
<delete>
<fileset dir="." includes="**/*.bak"/>
</delete>
删除当前目录下所有的文件和目录,包括当前目录
<delete includeEmptyDirs="true">
<fileset dir="build"/>
</delete>
删除当前目录下所有的文件和目录,不包括当前目录
<delete includeemptydirs="true">
<fileset dir="build" includes="**/*"/>
</delete>
删除当前目录下所有的svn相关文件(因为svn文件默认是excludes,所以要设置一下)
<delete defaultexcludes="false">
<fileset dir="src" includes="**/*.svn"/>
</delete>
删除文件目录树
<deltree dir="dist"/>
6.5,剪切文件
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**/*.jar">
<exclude name="**/ant.jar/>
</fileset>
</move>
6.6重命名
<rename src="ann.jar" dest="ant-${version}.jar/>
6.7建立临时文件
在目录build下,建立名为temp.file,后缀为.xml的文件
<tempfile property="temp.file" destDir="build" suffix=".xml"/>
6.8,Touch的使用
如果文件不存在创建文件,如果存在,更改最后访问时间为当前系统时间
<touch file="myfile"/>
如果文件不存在创建文件,更改最后访问时间为06/28/2002 2:02 pm
<touch datetime="09/10/1974 4:30 pm">
<fileset dir="src_dir"/>
</touch>
6.9,Condition的使用
有<ant>,<or>,<not>等tag
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</ant>
</condition>
6.10,替换replace
<replace file="configure.sh" value="defaultvalue" propertyFile="source/name.properties">
<replacefilter token="@token1@"/>
<replacefilter token="@token2@" value="value2"/>
<replacefilter token="@token2@" value="property.key"/>
</replace>
6.11,调用chmod
<chmod perm="go-rwx" type="file">
<fileset dir="/web">
<include name="**/*.cgi"/>
<include name="**/*.old"/>
</fileset>
<dirset dir="/web">
<include name="**/private_*"/>
</dirset>
</chmod>
6.12,checksum MD5运算
md5文件,然后把值放入ann.bar.MD5属性
<checksum file="ann.bar"/>
md5文件,然后把值放入annbarMD5属性
<checksum file="ann.bar" property="annbarMD5"/>
md5目录下的所有文件,然后建立一个.md5文件,把所有的md5值放入
<checksum>
<fileset dir=".">
<include name="ann*"/>
</fileset>
</checksum>
6.13,Available的使用
如果类存在,则设置属性Myclass.present为true,如果没有就false
<available classname="org.whatever.Myclass" property="Myclass.present"/>
如果文件存在则设置属性jaxp.jar.persent为true,否则为false
<property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>
<available file="${jaxp.jar}" property="jaxp.jar.present"/>
如果目录存在,则设置属性为true,否则为false
<available file="/usr/local/lib" type="dir" property="local.lib.present"/>
如果classpath下寻找class,存在则设置属性为true,否则为false
在工程tag下定义path,在target中使用
<property name="jaxp.jar" value="./lib/jaxp11/jaxp.jar"/>
<path id="jaxp" location="${jaxp.jar}"/>
<available classname="javax.xml.transform.Transformer" classpathref="jaxp" property="jaxp11.present"/>
如果在classpath下发现文件则设置属性为true,否则为false
<available property="hava.extras" resource="extratasks.properties">
<classpath>
<pathelement location="/usr/local/ant/extra.jar"/>
</classpath>
</available>
6.14,设置property
设置属性name-value
<property name="ann.dist" value="dist"/>
读取属性文件中的属性配置
<property file="ann.properties"/>
读取网络中的property-set
<property url="http://www.mysite.com/bla/props/ann.properties"/>
读取文件中的属性配置
<property resource="ann.properties"/>
读取环境变量
<property environment="env"/>
读取属性文件中的属性,并作为全局引用
<property file="/Users/antoine/.ant-golbal.properties"/>
6.15,错误处理
显示错误:
1,<fail>something wrong here.</fail>
2,<fail message="${属性}"/>
如果这个属性不存在显示错误:
<fail unless="failCondition" message="unless Condition"/>
如果这个属性存在显示错误
<fail if="failCondition" message="if Condition"/>
如果符合条件显示错误,(这里的条件是没有设置属性):
<fail message="tag condition">
<condition>
<not>
<isset property="failCondition"/>
</not>
</condition>
</fail>
6.16,建立一个目录
<mkdir dir="${dist}/lib"/>
6.17,打jar包
<jar destfile="${dist}/lib/app.jar" basedir="${build}/classes"/>
或者
<jar destfile="${dist}/lib/app.jar" basedir="${build}/classes" includes="mypackage/test/**" excludes="**/Test.class"/>
6.18,打Ear包
<ear destfile="build/myapp.ear" appxml="src/metadata/application.xml">
<fileset dir="build" includes="*.jar,*.war"/>
</ear>
6.19,执行程序
<target name="help">
<exec executable="cmd">
<arg value="/c"/>
<arg value="ant.bat"/>
<arg value="-p"/>
</exec>
</target>
6.20,运行jar包
带参数执行:
<java classname="test.Main">
<arg value="-h"/>
<classpath>
<pathelement loc ...
发表评论
-
ANT十五大最佳实践
2008-10-24 20:40 483ANT十五大最佳实践 作 ... -
Ant 构建文件build.xml(转)
2008-10-24 21:54 965Ant 构建文件build.xml Ant 构建文件build ... -
ant结合junit进行软件自动测试(转)
2008-10-29 15:18 9421、熟练ant进行java工程编译(参考本人“ant编译jav ... -
ant 彻底了解(转)
2008-10-29 15:20 6391 Ant是什么? Apache Ant 是一个基于 Jav ... -
在ant中使用junit命令跑所有测试
2008-10-29 17:40 1187<!--*************编译测试文件***** ... -
分页-参考
2008-10-30 20:08 695Oracle9i数据库,50万条记录,做分页显示时候,页面调用 ... -
给编程狂热者的ant task笔记收藏
2008-10-31 13:59 823给编程狂热者的ant task ... -
build.xml
2008-11-02 20:02 896<?xml version="1.0" ... -
c-build.xml
2008-12-11 09:41 1267<?xml version="1.0&qu ... -
build.xml
2008-12-02 16:40 1203<?xml version="1.0&qu ...
相关推荐
《Ant学习笔记:详解Ant执行命令参数与系统属性》 Ant,作为一个基于Java的构建工具,因其跨平台性以及XML格式的构建脚本而被广泛应用于自动化构建过程,如编译、打包、测试等。本篇文章将深入探讨Ant执行命令的...
根据提供的文件信息,这里将深入解析“ant学习笔记:一个简单的java编译部署实例”,涵盖标题、描述、标签以及部分内容中提及的关键知识点。 ### Apache Ant简介 Apache Ant是一款开源的Java环境下的自动化构建...
**Ant学习笔记** Ant是一个基于Java的构建工具,它的全称是Another Neat Tool,主要应用于Java项目的构建。Ant的设计理念是通过XML配置文件来定义构建过程,而非依赖于特定平台的shell命令。每个构建任务是由实现了...
**Ant学习笔记** Apache Ant,一个Java库和命令行工具,其任务是驱动构建过程。它是Java世界中广泛使用的构建工具,类似于Unix世界的Make。Ant以其XML格式的构建文件(通常命名为`build.xml`)而闻名,这个文件包含...
### ant学习笔记:深入了解ant构建工具 #### 引言 `ant`,作为一款源自动网络的学习笔记,主要探讨了Apache Ant这一强大的构建工具。Apache Ant是一款开源的、跨平台的构建工具,专为Java应用程序设计,旨在简化并...
NULL 博文链接:https://worktianqi.iteye.com/blog/2162932
Ant 1.9.1是Ant的一个版本,学习笔记通常记录了使用该工具的基本操作和配置方法。 ### Ant的下载和安装 要使用Ant,首先需要下载并安装。在Windows系统中,通常需要配置环境变量以便于命令行中使用Ant命令。ANT_...
总的来说,这个“ant个人学习笔记和简单示例”应该能帮助你掌握Ant的基本用法,理解构建过程的自动化,以及如何编写和维护自己的构建文件。通过学习和实践其中的示例,你将能够熟练地运用Ant来构建和管理Java项目,...
Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容...ant学习笔记...................387 Web Service学习笔记.....388
《Ant构建工具学习指南》 Ant,作为Java领域的一个强大构建工具,它的主要作用在于将复杂的项目构建过程规范化、自动化,使得开发者能够更专注于代码的编写而非构建流程。本文将深入探讨Ant的基本概念、安装配置、...
内容目录 .......................1 Java/JavaEE.....1 2008年11月1日...............1 Unix 学习笔记7 一、Unix前言............7 ...ant学习笔记...................387 Web Service学习笔记.....388
**ANT学习笔记(一)——ANT结合JUNIT4学习DEMO** ANT,全称为Apache Ant,是一个基于Java的构建工具,用于自动化Java项目的构建、编译、测试和部署过程。它通过XML配置文件来定义任务,使得项目构建过程可配置且可...
在本篇ANT学习笔记中,我们将探讨如何将ANT应用于WEB项目的测试DEMO。ANT是一个流行的Java构建工具,它允许开发者自动化构建、测试和部署软件。本文档将介绍ANT的基本概念,以及如何配置和运行一个针对WEB应用的构建...
### ant的学习笔记知识点详解 #### 一、Ant的作用与特性 Ant是一款强大的自动化构建工具,主要应用于Java项目,能够高效地处理项目的编译、打包、测试等任务。它采用XML格式编写构建脚本,这使得Ant具有良好的跨...
在"Ant打包编译部署工具学习笔记2"中,我们可以预期博主分享了关于如何利用Ant进行更复杂的构建操作,例如集成测试、优化和打包。这可能包括如何配置build.xml文件,添加自定义任务,以及如何处理依赖关系。由于没有...
3. **Ant学习笔记.doc与Ant权威指南.pdf** Ant是Java世界里常用的构建工具,能够自动化执行编译、打包、测试等任务。文档和PDF提供了Ant的基本使用、任务定义、宏定义等,对于项目构建流程的管理至关重要。 4. **...