修订者: 黄 凯
E_mail: hk_sz@163.com
前 言
由于现在公司进行Unit Test Case的整理阶段,所以抽空对Ant和Junit技术进行了一下了解,以下是集合了众家所长之精华(考虑到是按我的思路总结的,也许不能完全表述原作者的思路,所以在参考中我把所有参考过的文章网址或书籍都罗列了出来,大家有时间不妨去看看原文)。
如果对Ant部分参数不明白的话,请参看《Ant理论篇》系列或ant自带的文档。
目 录
一、 Ant 使用实例
1.1 通过 Ant 的 copt task 将当前目录下最近更新的文件(按系统时间来区分)文件提交至指定目录
1.2 用 Ant 开发 java 程序
1.3 ant 结合 junit 进行软件自动测试
1.4 ant 开发和部署 web 应用程序
1.5 ant 打包( jar ) 应用程序
1.6 ant 开发 EJB 应用程序
参考
一、 Ant 使用实例
1.1 通过 Ant 的 copt task 将当前目录下最近更新的文件(按系统时间来区分)文件提交至指定目录
1 前提:在D盘下创建两个文件夹test1和test2,并在test1中创建build.xml文件,内容如下:
< project name =" test " default =" upload ">
<!-- 设置提交的根路径以及提交目录属性 -->
< property name =" dest_drive " value =" D:\ " />
< property name =" dest_dir " value =" ${dest_drive}\test2\test " />
<!-- 如果没有提交目录的话,创建提交目录 -->
< target name =" create_dir ">
< mkdir dir =" ${dest_dir} " />
</ target >
<!-- 通过copy task提交当前目录下除build.xml外所有非临时文件 -->
< target name =" upload " depends =" create_dir ">
< copy todir =" ${dest_dir} ">
< fileset dir =" . ">
< exclude name =" **\build.xml "/>
</ fileset >
</ copy >
</ target >
</ project >
2>进入DOS命令行状态,运行D:\test1>ant。进入test2中进行检查,看是否已经建立好了test子目录并且将test1中的文件除build.xml外都已经提交过来。如果这时你再运行ant,会发现其没有任何操作提示,因为已经没有新文件需要提交了。
注:有兴趣的朋友不妨将其中一个文件更新一下再执行一次,你会发现 upload: 下会出现新的信息。
1.2 用Ant开发java程序,以HelloWord为例
1. 本次实例的目录结构:
--\src 源程序目录
--
首先在D盘创建test目录和src子目录。
2. 在src子目录下创建HelloWord.java文件,内容如下:
{
public static void main(String args[])
{
System.out.println( " Hello World! " );
}
}
< project default = " build " basedir = " . " >
< property name = " appname " value = " HelloWord " />
< property name = " base " value = " D:\test " />
< property name = " src " value = " src " />
< property name = " build " value = " classes " />
< property name = " myclasspath " value = " ${base}\${build} " />
< target name = " build " >
< mkdir dir = " ${build} " />
< javac srcdir = " ${src} " destdir = " ${build} " >
< include name = " **/*.java " />
</ javac >
</ target >
< target name = " run " depends = " build " >
< exec executable = " java " >
< arg line = " -classpath ${myclasspath} ${appname} " />
</ exec >
</ target >
< target name = " clean " >
< delete includeEmptyDirs = " true " >
< fileset dir = " ${build} " />
</ delete >
</ target >
</ project >
为了提高程序的可移植性,我们将property分离出来组成build.properties文件。新的build.xml文件和build.properties文件内容如下:
build.properties文件:
src = src
build = classes
myclasspath = $ {basedir} \\$ {build}
build.xml文件(property部分通过file调用build.properties即可):
< project default = " build " basedir = " . " >
< property file = " build.properties " />
< target name = " build " >
< mkdir dir = " ${build} " />
< javac srcdir = " ${src} " destdir = " ${build} " >
< include name = " **/*.java " />
</ javac >
</ target >
< target name = " run " depends = " build " >
< exec executable = " java " >
< arg line = " -classpath ${myclasspath} ${appname} " />
</ exec >
</ target >
< target name = " clean " >
< delete includeEmptyDirs = " true " >
< fileset dir = " ${build} " />
</ delete >
</ target >
</ project >
4. 在test目录下运行ant查看执行结果。
再运行ant run和ant clean看看会怎么样,:)
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
下载
然后将包含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 )。
相关推荐
这篇博文链接指向的是iteye博客上的一篇文章,可能详细介绍了如何使用Ant编写和运行build script的具体步骤,以及可能遇到的问题和解决方案。遗憾的是,由于没有直接的描述内容,我们无法获取更多具体信息。但是,...
在描述中提到的博客链接指向了ITEYE上的一篇关于Ant的博文,虽然具体内容没有提供,但可以推测博主可能分享了Ant的使用经验、常见问题解决方法或者某个特定功能的深入解析。ITEYE是一个知名的IT技术社区,这样的博客...
本实战篇将深入探讨Spring Web Service的核心概念、架构设计以及实现步骤,旨在帮助开发者熟练掌握这一强大的工具。 首先,Spring Web Service是Spring框架的一个扩展,它允许开发人员创建基于WSDL(Web Services ...
### Ant使用指南详解 ...通过本篇指南的学习,您不仅掌握了 Ant 的基础知识,还了解了如何在实际项目中应用 Ant。无论您是在寻找一种新的构建工具还是希望进一步提升现有的构建流程,Ant 都是一个值得考虑的强大选项。
### OSGi实战进阶篇知识点总结 #### 一、序言与背景 - **序言**:作者从个人经历出发,表达了对于插件体系结构的兴趣,并提到了早期接触的一些工具,如Ant和Maven,这表明作者对于构建工具及模块化开发有着深厚的...
本篇将深入探讨如何将这两者整合,同时利用Ant Design Pro构建一个简易的权限管理系统。 一、SpringBoot与Shiro简介 1. SpringBoot:作为Spring框架的一种快速开发工具,它通过自动配置、起步依赖等特性简化了...
知名的设计规范如Salesforce、Ant Design、Element和View UI等已经成为行业内学习和借鉴的对象。 #### 二、原子设计方法论 企业级B端设计规范的构建通常采用原子设计方法论,这一理念由设计师Brad Frost提出,灵感...
《全栈性能测试修炼宝典 JMeter实战》是软件测试领域里程碑式的重要著作,由多位培养出经理级乃至总监级性能高手的大师联手创作,本书深入讲解了性能测试实践操作过程中诸多难题的调优心法,实现从理论到实操的升华...
### PyTorch 入门实战学习笔记 #### 一、PyTorch简介 PyTorch 是一个基于 Torch 的机器学习库,它支持动态计算图,主要用于应用程序中的深度神经网络研究。PyTorch 提供了丰富的功能,如自动梯度计算、GPU 加速...
在本篇全栈多端开发实战中,我们将探讨如何构建一个涵盖后端、前端PC以及移动端的应用。核心技术栈包括后端的SpringBoot搭配MybatisPlus和Mysql数据库,前端使用Vite3、Vue3以及TypeScript,同时结合Ant-design-vue...
《全栈性能测试修炼宝典 JMeter实战》是软件测试领域里程碑式的重要著作,由多位培养出经理级乃至总监级性能高手的大师联手创作,本书深入讲解了性能测试实践操作过程中诸多难题的调优心法,实现从理论到实操的升华...
“构建实战篇 1:单页应用的基本配置.md”涵盖了创建Vue单页应用(SPA)的步骤,包括安装Vue CLI、生成项目模板、启动开发服务器、以及配置路由等。了解SPA的基本结构和路由管理对理解和构建Vue项目至关重要。 在...
### 第一篇:Eclipse开发入门 #### 1.1 下载并安装Eclipse 首先,介绍了如何从官方网站下载Eclipse,并提供了详细的安装步骤。这部分内容对于初学者尤为重要,确保他们能够顺利地搭建起开发环境。 #### 1.2 安装...
《J2EE OA项目开发日记》是一篇记录开发者在J2EE平台上开发办公自动化(OA)系统的实战经验分享。文章涵盖了从项目准备到编码实施的关键环节,并提到了多个相关技术,如Java语言、JSP、Servlet、J2EE、EJB、EJB-QL、...
在SpringCloud实战小贴士之Zuul的路径匹配中,路由匹配是非常重要的一部分。 Zuul作为SpringCloud的网关组件,路径匹配是其核心功能之一。在本篇文章中,我们将详细介绍Zuul的路径匹配机制,包括Ant风格的路径表达式...
"JUnit实战篇.mht"和"JUnit实战篇1.mht"很可能是两篇深入的实战文章,涵盖了在真实项目中如何运用JUnit进行测试驱动开发(TDD)或者行为驱动开发(BDD),可能包括了如何编写集成测试、如何进行测试隔离、以及如何...