ant入门

介绍

Apache Ant是一个基于Java的 构建工具,它可以用于构建多种项目,但是目前主要被用于Java项目的构建, Ant是用Java语言编写,可以在多个操作系统中运行,目前在绝大部分的Java开源项目中,都选择使用Ant作为构建项目的工具,合理的使用Ant可以大大降低项目构建、部署的难度。在本课程的内容中,将介绍Ant构建项目的基本用法,利用这里基本的知识,我们可以尝试使用Ant来构建自己的项目,体验Ant给我们带来的方便和高效。
在初识ant的时候,我们可以把ant想象为dos中的批处理文件或lunix中的shell编程:我们每次做一件事都要重复的做它的许多步骤。使用了ant,我们就可以讲这些步骤写成脚本,下次重复的时候, 不需要重复它的每一步,只需要调用这个脚本就可以了。

工程【project】

工程就是一个脚本,一次构建或者部署的所有工作。
目标【target】
在Ant脚本中,可以把想做的事情用target描述,每个target描述一件事情。比如第一个target要拷贝,第二个target要打jar包。Target本身不难,但是我们要注意两件事。
每个工程都可以设置默认的目标,它是从默认的目标开始运行。
目标之间有 依赖性,如果<target name=“b” depends=“a”>,代表目标b依赖于目标a,所以目标a无论如何都会先于目标b运行。
属性【property】
一个ant脚本可能运行在不同的机器上,虽然部署工程要做的事情是一样的,但是不同的机器的情况可能不一样。比如第一台机器的tomcat装在d:\tomcat,但是另一台机器的tomcat装在e:\tool\tomcat。这时候,我们可以使用属性,把这些经常变化的变量放到脚本文件的开始,让情况变化的时候不至于修改整个脚本。

配置环境

到apache的官方网站下载http://ant.apache.org/bindownload.cgi其使用包apache-ant-1.8.2-bin.zip,目前其最新版本是1.8.2。
下载之后只需要解压就可以使用,比如解压到D:\study\java\ide。
这时我们需要设置环境变量:
设置ANT_HOME为安装的目录D:\study\java\ide\apache-ant-1.8.2-bin。
把ANT_HOME安装目录的bin子目录,加入到path里D:\study\java\ide\apache-ant-1.8.2-bin\bin。

最简单的脚本示例


java代码:
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <project name="sample" default="init3">   
  3. <property name="dlist" value="f:\37\dlist" />   
  4.     
  5. <target name="init1" depends="init2">   
  6. <mkdir dir="${dlist}\1"/>   
  7. </target>   
  8. <target name="init2">   
  9. <mkdir dir="${dlist}\2"/>   
  10. </target>   
  11. <target name="init3" depends="init1">   
  12. <mkdir dir="${dlist}\3"/>   
  13. </target>   
  14.     
  15. </project>  
<?xml version="1.0" encoding="UTF-8"?>
<project name="sample" default="init3">
<property name="dlist" value="f:\37\dlist" />
 
<target name="init1" depends="init2">
<mkdir dir="${dlist}\1"/>
</target>
<target name="init2">
<mkdir dir="${dlist}\2"/>
</target>
<target name="init3" depends="init1">
<mkdir dir="${dlist}\3"/>
</target>
 
</project>

在命令行里执行构建文件

刚刚我们已经把ant安装目录的bin文件夹加入了环境变量path里,所以现在在任意文件夹下都可以引用ant命令。
直接在命令行中敲入ant,就是执行本目录下的构建文件build.xml;如果本目录下不只一个构建文件,还可以使用-file来指定其的构建文件。如:输入
ant –file build-another.xml就是引用build-another.xml这个构建文件。

核心task—clean、mkdir


java代码:
  1. clean用于删除一个文件夹   
  2. <target name="clean">   
  3. <delete dir="${dlist}"/>   
  4. </target>   
  5. mkdir用于新建一个文件夹   
  6. <target name="init" depends="clean">   
  7. <mkdir dir="${dlist}"/>   
  8. </target>   
  9.    
clean用于删除一个文件夹
<target name="clean">
<delete dir="${dlist}"/>
</target>
mkdir用于新建一个文件夹
<target name="init" depends="clean">
<mkdir dir="${dlist}"/>
</target>
 

核心task—copy


java代码:
  1. copy用来拷贝一个文件夹   
  2. <target name="copy">   
  3. <copy todir="${dlist}\classes">   
  4. <fileset dir="${config}">   
  5. <exclude name="**/*.properties"/>   
  6. </fileset>   
  7. </copy>   
  8. </target>  
copy用来拷贝一个文件夹
<target name="copy">
<copy todir="${dlist}\classes">
<fileset dir="${config}">
<exclude name="**/*.properties"/>
</fileset>
</copy>
</target>
可以通过<exclude>子元素和<include>子元素来指定拷贝的黑白名单。
示例中的”**/*.properties”就是著名的ant-style文件表示法。其中前面的**表示可以在这个目录下的任意子目录中,而*代表了任意的文件名。这将是我们将来经常用到的功能,请大家猜一下以下几个写法分别代表什么:“*.*”、“*.properties”、“**/*.*”。
 

核心task—javac


java代码:
  1. <path id="project.classpath">   
  2. <fileset dir="${PROJECT_LIB}">   
  3. <include name="**/*.jar"/>   
  4. </fileset>   
  5. <pathelement path="${PROJECT_CLASS}"/>   
  6. </path>   
  7. <target name="javac" depends="copy">   
  8. <javac srcdir="${PROJECT_SRC}" destdir="${PROJECT_CLASS}">   
  9. <classpath refid="project.classpath"/>   
  10. </javac>   
  11. </target>    
  12. 在使用javac的时候,要引用classpath,这就是前面定义的<path>子元素,而它里面的<fileset>子元素用于引用多个jar包;<pathelement>子元素用于引用一个文件夹下的所有class。  
<path id="project.classpath">
<fileset dir="${PROJECT_LIB}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${PROJECT_CLASS}"/>
</path>
<target name="javac" depends="copy">
<javac srcdir="${PROJECT_SRC}" destdir="${PROJECT_CLASS}">
<classpath refid="project.classpath"/>
</javac>
</target> 
在使用javac的时候,要引用classpath,这就是前面定义的<path>子元素,而它里面的<fileset>子元素用于引用多个jar包;<pathelement>子元素用于引用一个文件夹下的所有class。

核心task—java


java代码:
  1. <path id="project.classpath">   
  2. <fileset dir="${PROJECT_LIB}">   
  3. <include name="**/*.jar"/>   
  4. </fileset>   
  5. <pathelement path="${PROJECT_CLASS}"/>   
  6. </path>   
  7. <target name="java" depends="javac">   
  8. <java classname="cn.javass.MyLogger" classpathref="project.classpath">   
  9. <arg value="xyz"/>   
  10. </java>   
  11. </target>   
  12. java用于运行一个java类,注意也需要引用classpath;还可以使用<arg>子元素向main方法的args[]传入参数。  
<path id="project.classpath">
<fileset dir="${PROJECT_LIB}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${PROJECT_CLASS}"/>
</path>
<target name="java" depends="javac">
<java classname="cn.javass.MyLogger" classpathref="project.classpath">
<arg value="xyz"/>
</java>
</target>
java用于运行一个java类,注意也需要引用classpath;还可以使用<arg>子元素向main方法的args[]传入参数。

核心task—junit


java代码:
  1. <target name="test" depends="java">   
  2. <junit dir="${PROJECT_CLASS}" failureProperty="test.failed">   
  3. <classpath refid="project.classpath" />   
  4. <formatter type="xml" />   
  5. <batchtest fork="true" todir="${PROJECT_REPORT_XML}" unless="testcase">   
  6. <fileset dir="${PROJECT_SRC}">   
  7. <include name="**/*Test.java" />   
  8. </fileset>   
  9. </batchtest>   
  10. </junit>   
  11.    
<target name="test" depends="java">
<junit dir="${PROJECT_CLASS}" failureProperty="test.failed">
<classpath refid="project.classpath" />
<formatter type="xml" />
<batchtest fork="true" todir="${PROJECT_REPORT_XML}" unless="testcase">
<fileset dir="${PROJECT_SRC}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
 


java代码:
  1. <junitreport todir="${PROJECT_REPORT_XML}">   
  2. <fileset dir="${PROJECT_REPORT_XML}">   
  3. <include name="TEST-*.xml" />   
  4. </fileset>   
  5. <report format="frames" todir="${PROJECT_REPORT_HTML}" />   
  6. </junitreport>   
  7. </target>  
<junitreport todir="${PROJECT_REPORT_XML}">
<fileset dir="${PROJECT_REPORT_XML}">
<include name="TEST-*.xml" />
</fileset>
<report format="frames" todir="${PROJECT_REPORT_HTML}" />
</junitreport>
</target>
junit任务和junitreport任务一般联合使用,junit任务用于运行单元测试,并把单元测试的结果以xml的方式保存下来;之后,junitreport任务读取junit任务生成的单元测试结果,并生成对应的html,向我们进行报告。
核心task—jar和war
 

java代码:
  1. <target name="makejar" depends="test">   
  2. <jar basedir="${PROJECT_CLASS}" destfile="e:\temp\temp.jar"/>   
  3. <war warfile="f:\ss.war" webxml="f:\dlist\WEB-INF\web.xml" >   
  4.     <fileset dir="f:\dlist">   
  5.     <exclude name="**\web.xml" />   
  6.     </fileset>   
  7. </war>   
  8. </target>  
<target name="makejar" depends="test">
<jar basedir="${PROJECT_CLASS}" destfile="e:\temp\temp.jar"/>
<war warfile="f:\ss.war" webxml="f:\dlist\WEB-INF\web.xml" >
    <fileset dir="f:\dlist">
    <exclude name="**\web.xml" />
    </fileset>
</war>
</target>
jar任务用于打jar包,需要指定打好的jar包放在哪里,已经从哪个文件夹开始打,同时还可以使用excludes和includes来指定不包含和包含的文件;war任务用于打war包,与jar任务非常类似,只是需要注意要指明web.xml的位置。
视频配套PPT,视频地址【 ant基础实战视频课程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不讲理的胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值