读书人

Ant实战篇 (1)

发布时间: 2012-07-05 07:59:18 作者: rapoo

Ant实战篇 (一)

?

Ant实战篇 (一)Ant?实战篇?(一)

?????????????????????????????????????????????????????????????????????????????修订者:?黄 凯?????????

E_mail:?hk_sz@163.com

前 言

由于现在公司进行Unit Test Case的整理阶段,所以抽空对Ant和Junit技术进行了一下了解,以下是集合了众家所长之精华(考虑到是按我的思路总结的,也许不能完全表述原作者的思路,所以在参考中我把所有参考过的文章网址或书籍都罗列了出来,大家有时间不妨去看看原文)。

如果对Ant部分参数不明白的话,请参看《Ant理论篇》系列或ant自带的文档。

?

目 录

一、?Ant?使用实例?
Ant实战篇 (1)
Ant实战篇 (1)
????1.1??通过?Ant?的?copt?task?将当前目录下最近更新的文件(按系统时间来区分)文件提交至指定目录
Ant实战篇 (1)????1.2??用?Ant?开发?java?程序?
Ant实战篇 (1)?????1.3??ant?结合?junit?进行软件自动测试?
Ant实战篇 (1)? ???1.4??ant?开发和部署?web?应用程序?
Ant实战篇 (1)?????1.5??ant?打包(?jar?)?应用程序?
Ant实战篇 (1)????1.6??ant?开发?EJB?应用程序?
参考

?

一、?Ant?使用实例

1.1?通过??Ant?的?copt task?将当前目录下最近更新的文件(按系统时间来区分)文件提交至指定目录?
?1??前提:在D盘下创建两个文件夹test1和test2,并在test1中创建build.xml文件,内容如下:

?<??xml?version?=?"?1.0?"??>??
Ant实战篇 (1)<?project?name?="?test?"?default?="?upload?">?

Ant实战篇 (1)???<!--?设置提交的根路径以及提交目录属性?-->??
Ant实战篇 (1)???<?property?name?="?dest_drive?"?value?="?D:\?"?/>??
Ant实战篇 (1)???<?property?name?="?dest_dir?"?value?="?${dest_drive}\test2\test?"?/>
Ant实战篇 (1)
Ant实战篇 (1)???<!--?如果没有提交目录的话,创建提交目录?-->??
Ant实战篇 (1)???<?target?name?="?create_dir?">??
Ant实战篇 (1)???????<?mkdir?dir?="?${dest_dir}?"?/>??
Ant实战篇 (1)???</?target?>?

Ant实战篇 (1)???<!--?通过copy?task提交当前目录下除build.xml外所有非临时文件?-->??
Ant实战篇 (1)???<?target?name?="?upload?"?depends?="?create_dir?">??
Ant实战篇 (1)???????<?copy?todir?="?${dest_dir}?">??
Ant实战篇 (1)??????????<?fileset?dir?="?.?">??
Ant实战篇 (1)?????????????<?exclude?name?="?**\build.xml?"/>??
Ant实战篇 (1)??????????</?fileset?>??
Ant实战篇 (1)???????</?copy?>??
Ant实战篇 (1)???</?target?>??
Ant实战篇 (1)</?project?>?
Ant实战篇 (1)
Ant实战篇 (1)



2>进入DOS命令行状态,运行D:\test1>ant。进入test2中进行检查,看是否已经建立好了test子目录并且将test1中的文件除build.xml外都已经提交过来。如果这时你再运行ant,会发现其没有任何操作提示,因为已经没有新文件需要提交了。

注:有兴趣的朋友不妨将其中一个文件更新一下再执行一次,你会发现 upload: 下会出现新的信息。

?

?D:\test?主目录
Ant实战篇 (1)????--\src??源程序目录
Ant实战篇 (1)????--\classes?编译后的class文件目录?
Ant实战篇 (1)
?? 首先在D盘创建test目录和src子目录。
2. 在src子目录下创建HelloWord.java文件,内容如下:
Ant实战篇 (1)?public???class??HelloWord
Ant实战篇 (1)?{
Ant实战篇 (1)?????public???static???void??main(String?args[])
Ant实战篇 (1)?????{
Ant实战篇 (1)????????System.out.println(?"?Hello?World!?"?);
Ant实战篇 (1)????}?
Ant实战篇 (1)}?
Ant实战篇 (1)3.在test主目录下创建build.xml文件,内容如下:?

?<??xml?version?=?"?1.0?"??>?
Ant实战篇 (1)?<?project??default?=?"?build?"??basedir?=?"?.?"?>??
Ant实战篇 (1)
Ant实战篇 (1)????<?property?name?=?"?appname?"??value?=?"?HelloWord?"???/>?
Ant实战篇 (1)????<?property?name?=?"?base?"??value?=?"?D:\test?"???/>?
Ant实战篇 (1)????<?property?name?=?"?src?"??value?=?"?src?"???/>?
Ant实战篇 (1)????<?property?name?=?"?build?"??value?=?"?classes?"???/>?
Ant实战篇 (1)????<?property?name?=?"?myclasspath?"??value?=?"?${base}\${build}?"???/>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?build?"?>?
Ant实战篇 (1)????????<?mkdir?dir?=?"?${build}?"???/>?
Ant实战篇 (1)????????<?javac?srcdir?=?"?${src}?"??destdir?=?"?${build}?"?>?
Ant实战篇 (1)????????????<?include?name?=?"?**/*.java?"???/>?
Ant实战篇 (1)????????</?javac?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?run?"??depends?=?"?build?"?>?
Ant实战篇 (1)????????<?exec?executable?=?"?java?"?>?
Ant实战篇 (1)????????????<?arg?line?=?"??-classpath?${myclasspath}?${appname}?"???/>?
Ant实战篇 (1)????????</?exec?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?clean?"?>?
Ant实战篇 (1)????????<?delete?includeEmptyDirs?=?"?true?"?>?
Ant实战篇 (1)????????????<?fileset?dir?=?"?${build}?"???/>?
Ant实战篇 (1)????????</?delete?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)?</?project?>?
Ant实战篇 (1)?
Ant实战篇 (1)

?appname?=?HelloWord
Ant实战篇 (1)src?=?src
Ant实战篇 (1)build?=?classes
Ant实战篇 (1)myclasspath?=?$?{basedir}?\\$?{build}??
Ant实战篇 (1)

?<??xml?version?=?"?1.0?"??>?
Ant实战篇 (1)?<?project??default?=?"?build?"??basedir?=?"?.?"?>?
Ant实战篇 (1)?
Ant实战篇 (1)????<?property?file?=?"?build.properties?"???/>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?build?"?>?
Ant实战篇 (1)????????<?mkdir?dir?=?"?${build}?"???/>?
Ant实战篇 (1)????????<?javac?srcdir?=?"?${src}?"??destdir?=?"?${build}?"?>?
Ant实战篇 (1)????????????<?include?name?=?"?**/*.java?"???/>?
Ant实战篇 (1)????????</?javac?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?run?"??depends?=?"?build?"?>?
Ant实战篇 (1)????????<?exec?executable?=?"?java?"?>?
Ant实战篇 (1)????????????<?arg?line?=?"??-classpath?${myclasspath}?${appname}?"???/>?
Ant实战篇 (1)????????</?exec?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)????<?target?name?=?"?clean?"?>?
Ant实战篇 (1)????????<?delete?includeEmptyDirs?=?"?true?"?>?
Ant实战篇 (1)????????????<?fileset?dir?=?"?${build}?"???/>?
Ant实战篇 (1)????????</?delete?>?
Ant实战篇 (1)????</?target?>??
Ant实战篇 (1)
Ant实战篇 (1)?</?project?>??
Ant实战篇 (1)
Ant实战篇 (1)

1.3?ant?结合?junit?进行软件自动测试

1> 用ant结合junit启动基本编译和测试的自动过程如下:

★ 执行?JUnit 测试

★ 捕获测试结果,将结果记录到?XML 文件或其它格式的文件

★ 将结果转化为基于?XSL 格式的测试报告

★ 将这个报告转化为?HTML 格式

★ 用电子邮件发送报告

?????一旦捕获结果,就可以使用XML格式化器将每个测试套件运行的故障和错误数,连同软件包和类名还有测试套件的执行时间一起引入。对于每个测试套件,都有以下信息被捕获:

☆ 测试案例的名称

☆ 执行的持续时间

☆ 故障或错误的类型(如果适用)

☆ 任何故障或错误的详细信息

2> 本次实例的目录结构:

D:\car???主目录

?????\src?????源程序目录

?????\classes编译后的class文件目录

?????\etc?????其他

?????????\xsl?????XSL文件目录

首先在D盘创建car目录、src子目录和etc子目录,并从%ANT_HOME%\etc下拷贝junit-noframes.xsl文件至D:\car\etc\xsl子目录下。

3> 从?http://download.sourceforge.net/junit/junit3.8.zip?下载,解压至D盘,将其目录下的junit.jar文件拷贝至%ANT_HOME%\lib目录下。

4> 在src子目录下新建Car.java以及testCar.java文件。

Car.java的内容如下:

//将要被测试的类

public class Car

{

????public int getWheels()

????{

????????return 3;

????}

}

testCar.java的内容如下:

//执行测试的类

import junit.framework.*;

?

public class testCar extends TestCase

{

????protected int expectedWheels;

????protected Car myCar;

???

????public testCar(String name)

????{

????????super(name);

????}

???

????protected void setUp()

????{

????????expectedWheels = 4;

????????myCar = new Car();

????}

???

????public static Test suite()

????{

????????return new TestSuite(testCar.class);

????}

???

????public void testGetWheels()

????{

????????assertEquals(expectedWheels, myCar.getWheels());

????}

}

5> 在build.xml和build.properties文件。

buil.properties文件内容如下:

src.dir=src

build.dir=classes

xsl.dir=etc/xsl

report.dir=report

build.xml文件内容如下:

<?xml version="1.0"?>
<project default="build" basedir=".">
?
?? ?<property file="build.properties" description="Transfer property from .properties file"/>

?? ?<target name="build" description="Build the work directory">
?? ???? <mkdir dir="${build.dir}" />
?? ???? <mkdir dir="${report.dir}" />
?? ???? <javac srcdir="${src.dir}" destdir="${build.dir}">
?? ???????? <include name="**/*.java" />
?? ???? </javac>
?? ?</target>
???
?? <target name="junit" depends="build"? description="Execute Unit Tests">
??????? <tstamp/>
??<junit printsummary="yes">
???<classpath>
??? ???<pathelement location="${build.dir}"/>
??? ?</classpath>

????? ??<formatter type="xml" />
???? ?<batchtest todir="${report.dir}">
?????? ??<fileset dir="${src.dir}">
????????? ??<include name="**/testCar.java" />
?? ????</fileset>
????? ??</batchtest>
??? ?</junit>

??? ?<junitreport todir="${report.dir}">
????? ??<fileset dir="${report.dir}">
??????? ??<include name="TEST-*.xml"/>
????? ??</fileset>
????? ??<report format="noframes" styledir="${xsl.dir}" todir="${report.dir}"/>
??? ?</junitreport>
??? </target>

?<target name="clean" description="Delete the work directory">
?? ??<delete includeEmptyDirs="true">
?????? ???? <fileset dir="${build.dir}"/>
?????? ???? <fileset dir="${report.dir}"/>
????? ?</delete>
? ?</target>

</project>

6> 在D:\car目录下运行ant junit,

这样在car\report中生成了?junit-noframes.html?、TESTS-TestSuites.xml和TEST-testCar.xml文件,打开junit-noframes.html查看结果。运行ant clean恢复原状。


?

1.4?ant?开发和部署?web?应用程序

1> 前提:

★ 完成《JBuilder9+Weblogic7实战篇之Filter运用篇》,因为这是我们这次打包的实例;

★ 将Filter整个目录拷贝至D盘,我是用Jbuilder编辑的,所以除classes文件夹和Filter.war文件删除外,其他的保留,我们要用到的相关目录结构如下:

D:\Filter

?????src?java源文件目录

?????Filter???JSP文件及配置文件目录

?????????WEB-INF??配置文件目录

2> 由于不是在Jbuilder环境进行编译,所以需要在CLASSPATH中定义servlet的路径。首先,我们到

http://java.sun.com/products/servlet/download.html

下载

http://java.sun.com/webapps/download/Redirect/103537442/5847479377282807053505607246086069333228938
633594669477228720286350602472859339008063305596058473206-4908/servlet-2_3-fcs-classfiles.zip

然后将包含servlet-2_3-fcs-classfiles.zip的整个路径加到CLASSPATH中。

3> 在D:\Filter目录下创建build.properties和Filter.xml文件。

build.properties文件内容如下:

WebLogic.user_projects.mydomain.applications=C:/bea/user_projects/mydomain/applications

filter=Filter

dest=classes.ant

src=src

Filter.xml文件内容如下:

<?xml version="1.0"?>
<project default="init" basedir=".">
?
?? ?<property file="build.properties"/>

?? ?<target name="init" description="initialization">
?? ???? <mkdir dir="${dest}" />
?? ???? <javac destdir="${dest}">
?? ???????? <src path="${src}"/>
?? ???? </javac>
?? ?</target>

?<target name="war" depends="init">
?? ??<war destfile="Filter.war" webxml="${filter}/WEB-INF/web.xml" compress="false">
????? ??<classes dir="${dest}">
??????? ??<include name="**/*.*"/>
????? ??</classes>
????? ??<fileset dir="${filter}">
??????? ??<include name="**/*.*"/>
????? ??</fileset>
????? ?</war>
?? ?</target>
?? ?
?? ?<target name="deploy" depends="war">
?? ??<copy todir="${WebLogic.user_projects.mydomain.applications}">
???? ?<fileset dir="." includes="Filter.war"/>
??? ?</copy>
?? ?</target>?
?? ?
?? ?<target name="rebuild" depends="clean,war">
?? ??<copy todir="${WebLogic.user_projects.mydomain.applications}">
???? ?<fileset dir="." includes="Filter.war"/>
??? ?</copy>
?? ?</target>????
????

?<target name="clean">
?? ??<delete includeEmptyDirs="true">
?????? ???? <fileset dir="${dest}"/>
?????? ???? <fileset dir=".">
?????? ???? ?<include name="Filter.war"/>
?????? ???? </fileset>
?????? ???? <fileset dir="${WebLogic.user_projects.mydomain.applications}">
?????? ???????? <include name="Filter.war"/>
?????? ???? </fileset>
????? ?</delete>
? ?</target>

</project>

4> 启动Weblogic server,在D:\Filter目录下运行ant deploy -buildfile Filter.xml进行部署,打开IE,
在地址栏输入http://localhost:7001/Filter/login.jsp查看是否能正常运行。然后,你可以修改Filter子目录下的login.jsp文件中的代码,
运行ant rebuild -buildfile Filter.xml重新部署,然后刷新http://localhost:7001/Filter/login.jsp查看显示修改后的结果是否正确。

5> 以上第3步是将web应用程序通过拷贝到%BEA_HOME%\user_projects\mydomain\applications目录下进行部署的,
其实ant提供了对应于Weblogic的发布任务<serverdeploy>。请用下面代码替换掉build.properties和Filter.xml文件中的代码。

build.properties文件内容如下:

WebLogic.user_projects.mydomain.applications=C:/bea/user_projects/mydomain/applications

filter=Filter

dest=classes.ant

src=src

weblogic.server=C:/bea/weblogic700/server

username=training

user.password=training

weblogic.filter=C:/bea/user_projects/mydomain/myserver/upload/Filter

Filter.xml文件内容如下:

<?xml version="1.0"?>
<project default="init" basedir=".">
?
?? ?<property file="build.properties"/>

?? ?<target name="init" description="initialization">
?? ???? <mkdir dir="${dest}" />
?? ???? <javac destdir="${dest}">
?? ???????? <src path="${src}"/>
?? ???? </javac>
?? ?</target>

?<target name="war" depends="init">
?? ??<war destfile="Filter.war" webxml="${filter}/WEB-INF/web.xml" compress="false">
????? ??<classes dir="${dest}">
??????? ??<include name="**/*.*"/>
????? ??</classes>
????? ??<fileset dir="${filter}">
??????? ??<include name="**/*.*"/>
????? ??</fileset>
????? ?</war>
?? ?</target>
?? ?
?? ?<target name="deploy" depends="war">
?? ??<serverdeploy action="deploy" source="Filter.war">
???????? <weblogic application="Filter"
????????? server="t3://127.0.0.1:7001"
????????? classpath="${weblogic.server}/lib/weblogic.jar"
????????? username="${username}"?
????????? password="${user.password}" ?
????????? component="Filter:myserver"?????
???? ???? debug="true"/>
??????? </serverdeploy>
?? ?</target>?
?? ?
?? ?<target name="redeploy" depends="war">
?? ??<serverdeploy action="update" source="Filter.war">
???????? <weblogic application="Filter"
????????? server="t3://127.0.0.1:7001"
????????? classpath="${weblogic.server}/lib/weblogic.jar"
????????? username="${username}"?
????????? password="${user.password}" ?
????????? component="Filter:myserver"?????
???? ???? debug="true"/>
??????? </serverdeploy>
?? ?</target>?
?? ?
?? ?<target name="list">
?? ??<serverdeploy action="list">
???????? <weblogic application="Filter"
????????? server="t3://127.0.0.1:7001"
????????? classpath="${weblogic.server}/lib/weblogic.jar"
????????? username="${username}"?
????????? password="${user.password}"????
???? ???? debug="true"/>
??????? </serverdeploy>
?? ?</target>?
?? ?
?? ?<target name="undeploy">
?? ??<serverdeploy action="undeploy">
???????? <weblogic application="Filter"
????????? server="t3://127.0.0.1:7001"
????????? classpath="${weblogic.server}/lib/weblogic.jar"
????????? username="${username}"?
????????? password="${user.password}"????
???? ???? debug="true"/>
??????? </serverdeploy>
?? ?</target>?
?? ?
?? ?<target name="delete">
?? ???? <serverdeploy action="delete" source="Filter.war">
???????? <weblogic application="Filter"
????????? server="t3://127.0.0.1:7001"
????????? classpath="${weblogic.server}/lib/weblogic.jar"
????????? username="${username}"
????????? password="${user.password}"/>
??????? </serverdeploy>
??? </target>????

?<target name="clean">
?? ??<delete includeEmptyDirs="true">
?????? ???? <fileset dir="${dest}"/>
?????? ???? <fileset dir="${weblogic.filter}"/>
?????? ???? <fileset dir=".">
?????? ???? ?<include name="Filter.war"/>
?????? ???? </fileset>
?????? ???? <fileset dir="${WebLogic.user_projects.mydomain.applications}">
?????? ???????? <include name="Filter.war"/>
?????? ???? </fileset>
????? ?</delete>
? ?</target>

</project>
6> 启动Weblogic server,在D:\Filter目录下运行ant deploy -buildfile Filter.xml进行部署,?打开?IE,在地址栏输入?http://localhost:7001/console/后在左边的单击?

mydomain\deployments\Web Applications\Filter?,然后在右边单击“?deploy?”选项栏,查看是否部署成功。?再?开一个IE,在地址栏输入http://localhost:7001/Filter/login.jsp查
看是否能正常运行。接下来运行ant undeploy -buildfile Filter.xml进行取消部署,?刷新?http://localhost:7001/console/?的?浏览器,查看部署是否成功取消。

???然后,你可以修改Filter子目录下的login.jsp文件中的代码,?再运行?ant redeploy -buildfile Filter.xml?进行重新部署,?再刷新?http://localhost:7001/console/?的?浏览器,查看
部署是否成功。

???然后刷新http://localhost:7001/Filter/login.jsp查看显示修改后的结果是否正确。

???最后,从Web Applications中删除Filter,运行ant delete -buildfile Filter.xml进行删除。?刷新?http://localhost:7001/console/?的浏览器,查看是否成功(在左边的单击
mydomain\deployments\Web Applications?)。

读书人网 >软件架构设计

热点推荐