Ant(蚂蚁搬家)工具

Ant

Ant是一个构建工具,是一个小程序。但是它通过自动完成所有的编译代码,运行测试以及打包重新部署的结果等繁琐费力的任务来帮助软件团队开发大程序.
Ant 使用Java编写,跨平台,易使用且可伸缩。既可以用在小型个人项目中,也可以用于大型多团队软件项目。
Ant的目标是自动完成所有的构建过程。
 
Ant的核心概念
构建文件:-build.xml
•Ant使用称之为构建文件的xml文件来描述如何构建工程,在这个文件里,开发者列出各种构建目标(target)以及达到这些目标的任务(task)。
一个构建文件包含一个项目-project   <project>
每个项目包含多个目标 – target   //每个target为一个大任务
目标依赖于其他目标 – depends  //大任务可以依赖于其他大任务,助理解:extends也有类似的依赖关系
目标包含任务 – javac,java,jar,war,copy,mkdir,delete,sql…//小任务
由任务完成所有工作。
 
第一个示例:
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="main" name="first">
	<target name="main">
	<!--编译本目录下的源文件-->
	<javac srcdir="." includeAntRuntime="yes" destdir="."/>
	<echo>Ok</echo>
	</target>
</project>

所有构建文件都要有<project>元素,而且至少有一个<target> 元素。
对于<project> 元素的default 属性并没有默认值。
构建文件并不一定要被命名为build.xml。不过build.xml是Ant 要搜索的默认文件名。
每个构建文件只能有一个<project> 元素
 
Ant任务(task)
一个task是一段可执行的代码。
一个task可以有多个属性(如果你愿意的话,可以将其称之为变量)。属性只可能包含对property的引用。这些引用会在task执行前被解析。
下面是Task的一般构造形式:
•<taskname attribute1="value1" attribute2="value2" ... />
•这里taskname是task的名字,attributeN是属性名,valueN是属性值。
有一套内置的(built-in)task,以及一些可选task,但你也可以编写自己的task。
所有的task都有一个task名字属性。Ant用属性值来产生日志信息。
 

Ant核心任务之copy

1.拷贝单个的文件:

<copy file="myfile.txt" tofile="mycopy.txt"/>

2.拷贝单个的文件到指定目录下

<copy file="myfile.txt" todir="../some/other/dir"/>

3.拷贝一个目录到另外一个目录下

<copy todir="../new/dir">

<fileset dir="src_dir"/>

</copy>

4.拷贝一批文件到指定目录下

<copy todir="../dest/dir">

<fileset dir="src_dir">

<include name="**/*.java"/>

<exclude name="**/Test.java"/>

</fileset>

</copy>

<copy todir="../dest/dir">

<fileset dir="src_dir" excludes="**/*.java"/>

</copy>

5.拷贝一批文件到指定目录下,将文件名后增加。Bak后缀

<copy todir="../backup/dir">

<fileset dir="src_dir"/>

<mapper type="glob" from="*" to="*.bak"/>

</copy>

6.拷贝一组文件到指定目录下,替换其中的@标签@内容

<copy todir="../backup/dir">

<fileset dir="src_dir"/>

<filterset>

<filter token="TITLE" value="Foo Bar"/>

</filterset>

</copy>


Ant核心任务之delete

删除一个(组)文件或者目录,例子:
1.删除一个文件
        <delete file="/lib/ant.jar"/>

2.删除指定目录及其子目录
        <delete dir="lib"/>

3.删除指定的一组文件
       <delete>

            <fileset dir="." includes="**/*.bak"/>

       </delete>

4.删除指定目录及其子目录,包括他自己
      <delete includeEmptyDirs="true">

           <fileset dir="build"/>

     </delete>


Ant核心任务move

Move:移动或重命名一个(组)文件、目录,例子:
1.移动或重命名一个文件
<move file="file.orig" tofile="file.moved"/>
2.移动或重命名一个文件到另一个文件夹下面
<move file="file.orig" todir="dir/to/move/to"/>
3.将一个目录移到另外一个目录下
<move todir="new/dir/to/move/to">
<fileset dir="src/dir"/>
</move>
4.将一组文件移动到另外的目录下
<move todir="some/new/dir">
<fileset dir="my/src/dir">
<include name="**/*.jar"/>
<exclude name="**/ant.jar"/>
</fileset>
</move>
5.移动文件过程中增加。Bak后缀
<move todir="my/src/dir">
<fileset dir="my/src/dir">
<exclude name="**/*.bak"/>
</fileset>
<mapper type="glob" from="*" to="*.bak"/>
</move>

Ant核心之javac

 
编译java原代码,例子
1.<javacsrcdir="{src}“  destdir="{build}“   classpath="xyz.jar“ debug="on"/>
编译{src}目录及其子目录下的所有。Java文件。Class文件将放在{build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息
2.<javacsrcdir="{src}:{src2}“ destdir="{build}“ includes="mypackage/p1/**, mypackage/p2/**“ excludes="mypackage/p1/testpackage/**” classpath="xyz.jar"debug="on“ />
编译{src}和{src2}目录及其子目录下的所有。Java文件,但是package/p1/**,mypackage/p2/**将被编译,而mypackage/p1/testpackage/**将不会被编译。Class文件将放在{build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息
3.<property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/>
<javacsrcdir="{src}“ destdir="{src}“ classpath="{classpath}“ debug="on"/>
路径是在property中定义的

Ant核心任务之java

java执行指定的java类,例子:
1.<java classname="test.Main">
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="{java.class.path}"/>
</classpath>
</java>
classname中指定要执行的类,classpath设定要使用的环境变量
2.<path id="project.class.path">
<pathelement location="lib/"/>
<pathelement path="{java.class.path}/"/>
<pathelement path="{additional.path}"/>
</path>
<target ... >
<rmic ...>
<classpathrefid="project.class.path"/>
</rmic>
</target>

Ant核心任务之jar

 
jar将一组文件打包,例子:
1.<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes"/>
将{build}/classes下面的所有文件打包到{dist}/lib/app.jar中
2.<jar destfile="{dist}/lib/app.jar"
basedir="{build}/classes"
includes="mypackage/test/**"
excludes="**/Test.class"
/>
将{build}/classes下面的所有文件打包到{dist}/lib/app.jar中,但是包括mypackage/test/所有文件不包括所有的Test.class
3.<jar destfile="{dist}/lib/app.jar"
basedir="{build}/classes"
includes="mypackage/test/**"
excludes="**/Test.class"
manifest="my.mf"
/>
manifest属性指定自己的META-INF/MANIFEST.MF文件,而不是由系统生成

Ant核心任务之war

对Jar的扩展,用于打包Web应用,例子:
假设我们的文件目录如下:
thirdparty/libs/jdbc1.jar
thirdparty/libs/jdbc2.jar
build/main/com/myco/myapp/Servlet.class
src/metadata/myapp.xml
src/html/myapp/index.html
src/jsp/myapp/front.jsp
src/graphics/images/gifs/small/logo.gif
src/graphics/images/gifs/large/logo.gif
下面是我们的任务的内容:
<war destfile="myapp.war" webxml="src/metadata/myapp.xml">
<fileset dir="src/html/myapp"/>
<fileset dir="src/jsp/myapp"/>
<lib dir="thirdparty/libs"> <exclude name="jdbc1.jar"/> </lib>
<classes dir="build/main"/>
<zipfileset dir="src/graphics/images/gifs" prefix="images"/>
</war>
完成后的结果:
WEB-INF/web.xml
WEB-INF/lib/jdbc2.jar
WEB-INF/classes/com/myco/myapp/Servlet.class
META-INF/MANIFEST.MF
index.html
front.jsp
images/small/logo.gif
images/large/logo.gif


 
 

bulid.xml

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="myProj" default="aa">
	<target name="aa" depends="jdoc">
		<echo message="Hello  World!"></echo>
		<echo >Ok</echo>
	</target>
	<target name="jdoc">
		<echo>依赖target......</echo>
		<javadoc sourcepath="src"
			destdir="d:/a/b"
			encoding="utf-8"
			docencoding="gb2312"
			></javadoc>
	</target>
	<target name="mdir">
		<mkdir dir="d:/b/cdbs/asdb/abd/w/and/asdn/b.txt"/>
	</target>
	<target name="deldir">
		<delete dir="d:a/cdbs"></delete>
	</target>
	<target name="movedir">
		<move todir="D:\\a">
				<fileset dir="D:\\b">
				<include name="**/*.*"/>
				</fileset>
		</move>
	</target>
	<target name="jar">
		<jar destfile="d:/lib/app.jar" basedir="${basedir}"/>
	</target>
	
	<property name="tomcat_home" value="E:\\MyEclipse 10.7\\apache-tomcat-7.0.30\\webapps"></property>
	<target name="depoly" description="发布项目到tomcat服务器">
		<copy todir="${tomcat_home}/${ant.project.name}">
			<fileset dir="${basedir}/WebRoot">
			<include name="**/*.*"/>
			</fileset>
		</copy>
	</target>
</project>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章