Ant(蚂蚁搬家)

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…//小任务
由任务完成所有工作。

 

准备工作

下载:
http://ant.apache.org/
配置环境变量:
ANT_HOME
PATH
验证Ant是否正常:
命令行输入 ant -version

QUICK-START:
1.新建空文件夹
2.新建一个Java文件
3,编写build.xml
4,运行ant

第一个示例:

 

<?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><pre name="code" class="java">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.<javac srcdir="{src}“  destdir="{build}“   classpath="xyz.jar“ debug="on"/>
编译{src}目录及其子目录下的所有。Java文件。Class文件将放在{build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息
2.<javac srcdir="{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"/>
<javac srcdir="{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 ...>
<classpath refid="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

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值