建立工程的目录
一般要根据工程的实际情况来建立工程的目录结构。但是,有一些比较通用的组织形式可供参考,比如所有的jakarta项目都使用类似的目录结构。下面让我们来看一下这种目录结构的特点。
表1
目录 |
文件 |
bin |
公共的二进制文件,以及运行脚本 |
build |
临时创建的文件,如类文件等 |
dist |
目标输出文件,如生成Jar文件等。 |
doc/javadocs |
文档。 |
lib |
需要导出的Java包 |
src |
源文件 |
对 于一个简单的工程,一般包括表1的几个目录。其中bin、lib、doc和src目录需要在CVS的控制之下。当然在这样的目录结构上,也可以做一些调 整,例如,可以建立一个extra目录来放置需要发布的Jar文件、Inf文件及图像文件等。同样,如果开发Web应用可以建立一个Web目录放置 JSP、HTML等文件。
如果我们开发的是一个比较复杂的项目,包括多个子项目,并且各个子项目是由不同的开发人员来完成的,那么要 如何来设计它的目录结构?首先有一点是需要确定的,不同的子项目应该拥有不同的Build文件,并且整个项目也应该有一个总的Build文件。可以通过 Ant任务或是AntCall任务调用子项目的Build文件,如下例:
<target name="core" depends="init">
<ant dir="components" target="core"/>
<ant dir="waf/src" target="core"/>
<ant dir="apps" target="core"/>
</target> |
在 各个子项目的耦合不是非常紧密的情况下,各个子项目应该有各自独立的目录结构,也就是说它们可以有自己的src、doc、build、dist等目录及自 己的build.xml文件,但是可以共享lib和bin目录。而对于那些耦合紧密的子项目,则推荐使用同一个src目录,但是不同的子项目有不同的子目 录,各个子项目的build.xml文件可以放在根目录下,也可以移到各个子项目的目录下。
编写Build文件
要用好Ant工具,关键是要编写一个build.xml文件。要编写出一个结构良好、灵活可扩展的Build文件,有两个问题要考虑,一是了解Build文件的基本结构,二是了解Ant定义的大量任务。
Ant的Build文件是一个标准的XML文件,它包含一个根节点Project,每个Project定义了至少一个或多个Target,每个Target又是一系列Task的集合。它们之间的关系如图2所示。
图2 build.xml文件的结构
每个Task是一段可被执行的代码,比如,前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task,我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践,这方面最好的参考就是官方的Ant使用手册。
外部文件的使用
使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。
可以将一个外部的XML文件导入Build文件中,这样多个项目的开发者可以通过引用来共享一些代码,同样,这也有助于Build文件的重用,示例代码如下所示:
<!DOCTYPE project [
<!ENTITY share-variable SYSTEM "file:../share-variable.xml">
<!ENTITY build-share SYSTEM "file:../build-share.xml">
]>
<project name="main" default="complie" basedir=".">
&share-variable;
&build-share;
... ... |
在J2EE项目中的应用
只要掌握了Ant的使用方法,在J2EE项目中的应用与在其它项目中的应用并没有太大的不同,但是仍有几点是需要注意的。
一 是要清楚War和Jar文件的目录结构,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic -ejb-jar.xml等)的位置,在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录 下。二是在J2EE项目中可能会涉及到一些特殊的任务,比如在Weblogic中会调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布 Jar到相应的服务器中等。可以用两种途径实现这些任务,一是扩展Ant任务实现这些任务,二是直接用Java任务来执行这些命令。下面是打包、发布一个 EJB的build.xml配置文件片断,代码如下:
<target name="deploy_HelloEJB" depends="compile">
<delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 -->
<delete file="${temp}/helloEJB.jar"/>
<!-- 删除WebLogic域中老版本的EJB -->
<delete file="${weblogic.deploy.dest}/helloEJB.jar"/>
<!-- 创建META-INF目录,放置ejb-jar.xml和weblogic-ejb-jar.xml -->
<mkdir dir="${temp}/ejb_make/META-INF"/>
<!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录-->
<copy todir="${temp}/ejb_make/META-INF">
<fileset dir="etc/baseinfo">
<include name="*.xml"/>
</fileset>
</copy>
<!-- 拷贝所有的helloEJB类到临时目录 -->
<copy todir="${temp}/ejb_make/">
<fileset dir="${dest.classes}/"> <!-- dest.classes是输出的类文件目录 -->
<include name="${dest.classes}/helloEJB/**"/>
</fileset>
</copy>
<!-- 将所有这些文件打包成helloEJB.jar -->
<jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/>
<!-- 进行weblogic.ejbc编译 -->
<java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" >
<classpath>
<fileset dir="lib">
<include name="*.jar" />
</fileset>
</classpath>
<arg value="${temp}/helloEJB.jar" />
<arg value="${temp}/helloEJB_deploy.jar" />
</java>
<!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 -->
<copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/>
</target> |
用Ant配合JUnit实现单元测试
Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit,以及如何编写测试用例(TestCase),感兴趣的读者可以参阅JUnit的相关文 档。在Ant中使用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,确认在这个目录下有 optional.jar,因为JUnit是Ant的扩展任务,需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务,代码如下:
<target name="run" depends="client">
<junit printsummary="yes" fork="yes" haltonfailure="yes">
<classpath>
<pathelement location="client.jar" />
</classpath>
<formatter type="plain" />
<test name="com.sharetop.antdemo.HelloWorldTest" />
</junit>
</target> |
高级话题
为Ant开发扩展任务
为Ant实现扩展任务其实是非常容易的,只需按照以下几个步骤即可:
1. 创建一个Java类继承org.apache.tools.ant.Task类;
2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换;
3. 如果扩展的任务需要嵌套其它的Task,那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer;
4. 如果扩展的任务要支持Text,需要增加一个方法void addText(String);
5. 对每个嵌套的元素,实现create、add 或 addConfigured 方法;
6. 实现public void execute方法;
7. 在build.xml文件中使用 <taskdef> 来引用自定义的Task。
下面以一个简单的例子来说明如何为Ant增加一个hello任务,它可以连续打印多条信息,打印的次数由属性count指定,而打印的内容则由它内嵌的一个helloinfo任务的message属性指定,看上去这非常类似JSP中自定义标签的一些概念,实现代码如下:
//HelloInfoTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloInfoTask {
private String msg;
public void execute() throws BuildException {
System.out.println(msg);
}
public void setMessage(String msg) {
this.msg = msg;
}
} |
下面是外部Task类的代码:
//HelloTask.java
package com.sharetop.antdemo;
import org.apache.tools.ant.*;
public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer
{
private Task info;
private int count;
public void execute() throws BuildException {
for(int i=0;i<count;i++)
info.execute();
}
public void setCount(int c){
this.count=c;
}
public void addTask(Task t){
this.info=t;
}
} |
实 现了这两个Task,在build.xml文件中定义它的task name,就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义Task,也可以通过修改default.properties文件来实现引入新Task,这个文件位于 org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分:
<target name="hello" depends="client">
<taskdef name="hello"
classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/>
<taskdef name="helloinfo"
classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/>
<hello count="3" >
<helloinfo message="hello world" />
</hello>
</target>
《未完待续》
分享到:
相关推荐
这篇“Java的Build工具—Ant应用指南(1)”将引领我们走进Ant的世界,了解其基本概念、配置和使用方法。 1. Ant基本概念 - 构建文件:Ant的主要工作是通过读取一个名为`build.xml`的XML文件来执行构建任务。这个...
本指南将深入探讨Ant工具的使用,帮助开发者高效地管理项目构建。 一、Ant概述 Ant是一个开源的Java构建工具,其设计灵感来源于Unix的Make工具。它通过XML配置文件(通常名为build.xml)来定义任务和目标,使得构建...
《Ant构建工具学习指南》 Ant,全称为Apache Ant,是Apache软件基金会开发的一个开源项目,主要用于Java应用程序的构建过程。作为一个基于Java的build工具,Ant以其灵活性、可移植性和强大的功能,在Java开发者中广...
2. **Ant入门指南** - 安装与配置Ant - 创建第一个Ant脚本 - 常用构建任务介绍 3. **理解Ant数据类型与属性** - 数据类型的定义与使用 - 属性的作用与管理 - 如何在构建过程中动态设置属性值 4. **使用JUnit...
ant说明指南ant说明指南ant说明指南ant说明指南
Ant是Apache软件基金会下的一个Java项目,它是一个构建工具,主要用来自动化Java应用程序的构建过程。这个“Ant使用指南”涵盖了Ant的基本概念、配置、任务和实战应用,旨在帮助开发者更好地理解和使用Ant。 1. **...
《Ant应用开发指南》是IT领域中针对Ant构建工具的一份详尽的教程与资源,旨在帮助开发者深入了解并掌握Ant的使用方法与实践技巧。Ant,最初作为一个缩写代表“Another Neat Tool”,是一个功能强大的构建工具,尤其...
**Apache Ant** 是一款流行的开源构建工具,专门设计用于处理Java项目的构建需求。它由James Duncan Davidson创建,并以“Another Neat Tool”(另一个整洁的工具)的首字母缩写命名。Ant的主要优势在于其跨平台特性...
《Ant权威指南》是关于Apache Ant这一开源构建工具的详细参考书籍,旨在帮助读者深入理解和高效使用Ant进行软件项目的构建和管理。Ant以其基于XML的构建文件格式和强大的任务库,成为了Java项目中的首选构建工具。...
Java Card是一种在智能卡或类似的微控制器设备上运行Java应用程序的技术,而Ant是Apache软件基金会的一个开源项目,是一个基于XML的构建工具,用于自动化Java项目的构建、编译、测试和部署过程。 【描述】提到"Ant ...
《Ant权威指南》是一本深度解析Apache Ant的权威著作,对于Java开发者来说,它是构建自动化不可或缺的参考书籍。Ant是一个基于Java的构建工具,它允许开发者通过XML来定义项目构建的流程,使得软件构建过程更加规范...
Ant由于其灵活性和广泛的社区支持,被广泛应用于Java项目中,与Maven和Gradle等现代构建工具一起,构成了Java开发者的重要工具链。虽然Maven和Gradle在某些方面提供了更高级的功能,但Ant仍然是很多老项目和特定场景...
Ant采用XML格式来定义构建过程,提供了丰富的任务(task)集合,适用于自动化编译、测试和部署Java应用程序。由于其简单易用、高度可配置的特点,在Java开发领域广受欢迎。 #### 二、环境搭建 为了能够使用Ant,首先...
Apache Ant是一个基于Java的构建工具,其名称源自“Another Neat Tool”(另一个整洁的工具)的首字母缩写。构建工具的主要作用是将源代码和相关的资源文件转换成可执行文件或可部署的包。随着软件项目的复杂度增加...