教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 网站编程教程 · JSP教程 · JSP环境配置

嘿嘿,在ibm上地用ant来管理enhydra项目

学院最新推荐文章
教程推荐
『嘿嘿,在ibm上地用ant来管理enhydra项目』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2005-10-31 
   
内容:

-. Ant简介
二.Ant的安装及配置
三:用ant管理enhydra项目
四:小技巧

参考文献
个人简介




宗锋 (zong_feng@263.net)
西北大学计算机系硕士研究生
2001 年 7 月

本文描述了ant的基本语法及其如何应用于enhydra项目的管理
-. Ant简介
可能有许多读者并不了解什么是ant,以及如何使用它。但只要你是用过linux,你应该知道make为何物,当我们编译linux内核及一些软件的源程序时,我们经常需要在控制台下输入make。Make其实就是一个项目管理工具,而ant所实现的功能与make差不多。Ant是apache软件基金会jakarta项目中的一个子项目,由于是基于java编写的,因此具有很好的跨平台性。Ant由一些内置任务(task)和可选择的任务组成(当然你还可以编写自己的任务),使用Make时,你需要写一个Makefile文件,而用ant时则需要写一个build.XML文件。由于采用XML的语法,所以build.XML文件很容易书写和维护,且结构很清晰,而不像Makefile文件有那么多的限制(例如在tab符号前有一个空格的话,命令就不会执行)。Ant的优点远不止这些,它还很容易的集成到一些开发环境中(例如visual age,jbuilder,netbeans)。

二.Ant的安装及配置
安装
Ant目前的版本是1.3,首先到http://jakarta.apache.org/ant/index.HTML下载ant最新版本1.3,解压到C:/ant(window操作系统) 或者/usr/local/ant(linux操作系统),由于我们要用到XMLc ,而ant1.3中并没有包含它,所以我们需要David.Li为ant写的XMLc任务。具体url为http://www.digitalsesame.com/enhydra/EnhydraAnt20001213.tar.gz。将下载后的文件中的ant.jar替换掉ant1.3中ant.jar.这样ant的版本变为1.2.

2.设置路径
(1):windows98操作系统
编辑C:\enhydra\.bashrc,加入下面三行

export ANT_HOME=/ant
export JAVA_HOME=/jdk-1.2.2
export PATH=${PATH}:${ANT_HOME}/bin

(2):Linux操作系统
编辑/etc/profile或者 用户目录下的.bashrc文件,加入下面三行

export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.2.2
export PATH=${PATH}:${ANT_HOME}/bin

三:用ant管理enhydra项目
1:基本的文件目录结构
enhydra这里不必多介绍了,要想了解它可以到http://www.linuxaid.com.cn/ 和http://www.cn.ibm.com/developerWorks/linux/sdk/ant/www.linuxforum.net上读一些与此相关的文章。

我们以David.Li写的AntDemo项目作为示例来讲述怎样用ant管理enhydra项目,首先下载此示例,url为http://www.digitalsesame.com/enhydra/AntDemo.tar.gz,解压到任意目录,我们可以看到目录树结构如下  
在这个目录树结构中,与传统的enhydra 项目不同的是,我们用build.XML取代了Makefile,在讲述这个build.XML文件前,我们先了解一个基本的 build.XML文件的结构。

2:build.XML的基本书写规范
下面我们就来讲述这个文件的书写方法,下面是这个文件的全部内容
1.<?XML version="1.0"?>
2.<project name="MyProject" default="dist" basedir=".">
3.<property name="dist" value="dist"/>
4.<target name="init">
5.<mkdir dir="${dist}"/>
6.</target>
7.</project>




为了方便说明,我们为每一行加了行号,第一行是XML文件的基本要素,第二行说明这是一个项目,第七行说明项目的结束 ,在第二行中,name="MyProject"说明此项目的名称,这个属性可有可无。basedir="."说明基本目录,此属性可有可无。default="dist"说明项目的缺省目标(target)是什么,这个属性必须有。所谓目标(target)就是一系列任务(task)组成的一个集合。每个任务(task)的书写方法如下:
<任务名 属性1="属性1的值" 属性2="属性2的值" ....... />




第三行定义了一些属性(property),以便后面使用,这非常类似于编程中定义的全局变量。从第四行开始定义目标(target),name="init"指明了此目标的名称,name属性在定义目标时必须有,当然定义目标时还有其他一些属性可选,例如depends,unless,具体请参考ant的文档。第五行开始定义此目标内的任务,其中mkdir时ant的内部任务名,dir是此任务的属性,其值为${dist}。此任务就是创建一个目录。其中${dist}是获取dist属性的值(就是我们在第三行定义的)。如上就是一个基本的build.XML文件的写法。你可以在命令行上输入 ant -buildfile build.XML

看一下你的当前目录下是否多了一个dist目录。如果出错,则可能是你没有把ant配置好,参见前面讲的安装及配置,看一下哪儿出了错。

3:build.XML文件
build.XML文件如下,其中有的注释和无关的代码删掉了,且做了一下小小的改动
1:<?XML version="1.0"?>
2: <project default="app" basedir=".">
3:<!-- 加入 XMLc 任务-->
4:<taskdef name="XMLc"classname="org.apache.tools.ant.taskdefs.optional.enhydra.XMLc"/>
5:<!-- =================================================================== -->
6:<!-- 设置编译的类路径 -->
7:<!-- =================================================================== -->
8:<path id="build.classpath">
9:<pathelement path="${build.classes}"/>
10:</path>

11:<!-- =================================================================== -->
12:<!-- 初始化基本属性 -->
13:<!-- =================================================================== -->
14:<target name="init">
15:<!-- Set up application info -->
16:<property name="app.Name" value="AntDemo"/>
17:<property name="app.name" value="antDemo"/>
18:<property name="app.version" value="0.0.1"/>
19:<property name="app.year" value="2000"/>

20:<!-- source code and document info -->
21:<property name="src.dir" value="."/>
22:<property name="doc.dir" value="./doc"/>
23:<property name="lib.dir" value="./lib"/>

24:<!-- package to be javadocs -->
25:<property name="packages" value="antDemo.*"/>

26:<!-- build info -->
27:<property name="build.dir" value="ant.build"/>
28:<property name="build.classes" value="${build.dir}/classes"/>
29:<property name="build.lib" value="${build.dir}/lib"/>
30:<property name="build.javadocs" value="${build.dir}/javadocs"/>
31:<property name="build.XMLc.dir" value="${build.dir}/XMLcout/"/>
32:<property name="build.debug" value="on"/>

33:<property name="dist.dir" value="./${app.name}-${app.version}"/>
34: </target>

35:<!-- =================================================================== -->
36:<!-- 创建要存放编译厚的文件的目录 -->
37:<!-- =================================================================== -->
38:<target name="prepare" depends="init">
39:<mkdir dir="${build.dir}"/>
40:</target>

41:<!-- =================================================================== -->
42:<!-- 用XMLC工具编译 HTML文件-->
43:<!-- =================================================================== -->
44:<target name="XMLc" depends="prepare">
45:<mkdir dir="${build.XMLc.dir}"/>
46:<XMLc srcdir="${src.dir}"
47:sourceout="${build.XMLc.dir}"
48:includes="**/*.HTML">
49:<!-- element name is same as command line parameter -->

50:<warnings param1="false"/>
51:<generate param1="both"/>
52:<HTML_encoding param1="gb2312"/>
53:<!-- the old arg element is still supported -->
54:<arg name="ssi"/>
55:<arg name="keep"/>
56:<!-- prefixmap do package name mapping -->
57:<prefixmap old="antDemo.presentation.HTML" new="antDemo.presentation"/>
58:</XMLc>
59:</target>

60:<!-- =================================================================== -->
61:<!-- 编译 -->
62:<!-- =================================================================== -->
63:<target name="compile" depends="XMLc,prepare">
64:<mkdir dir="${build.classes}"/>

65:<!-- compile XMLC generated java -->
66:<javac srcdir="${build.XMLc.dir}"
67:destdir="${build.classes}"
68:classpathref=../../"build.classpath"
69:debug="${build.debug}"/>

70:<!-- compile java codes -->
71:<javac srcdir="${src.dir}"
72:destdir="${build.classes}"
73:classpathref=../../"build.classpath"
74:debug="${build.debug}"
75:includes="${app.name}/**"
76:/>
77:</target>

78:<!-- =================================================================== -->
79:<!-- 复制 -->
80:<!-- =================================================================== -->
81:<target name="extra" depends="init">
82:<mkdir dir="${build.classes}/${app.name}/presentation"/>
83:<copy todir="${build.classes}/${app.name}/presentation">
84:<fileset dir="${src.dir}/${app.name}/presentation">
85:<include name="**/*.gif"/>
86:<include name="**/*.jpg"/>
87:<include name="**/*.js"/>
88:<include name="**/*.CSS"/>
89:</fileset>
90:</copy>
91:</target>


92:<!-- =================================================================== -->
93:<!-- 创建lib目录,class文件及其他文件打包 -->
94:<!-- =================================================================== -->
95:<target name="jar" depends="extra,compile">
96:<mkdir dir="${build.lib}"/>
97:<jar jarfile="${build.lib}/${app.name}.jar" basedir="${build.classes}" />
98:</target>

99:<!-- =================================================================== -->
100:<!-- 复制应用程序的配置文件 -->
101:<!-- =================================================================== -->
102:<target name="app" depends="jar,extra">
103:<!-- do the app.conf -->
104:<copy file="${src.dir}/${app.name}/${app.Name}.conf" todir="${build.dir}"/>

105:<!-- do the multiserver.conf -->
106:<filter token="OUTPUT" value="./" />
107:<copy file="${src.dir}/${app.name}/multiserver.conf.in"
108:tofile="${build.dir}/multiserver.conf"
109:filtering="on"/>

110:<!-- do the start script -->
111:<copy file="${src.dir}/${app.name}/start" todir="${build.dir}"/>
112:<chmod file="${build.dir}/start" perm="ugo+rx"/>
113:</target>

114:</project>




4:build.XML详细说明
下面我们将详细讲述这个文件,同样为了方便,我加了行号,当然一些基本的东西我就不再重复了。第四行taskdef任务(task)属于ant的内部任务,它的作用是定义一个任务,其基本属性有name,classname,在定义时这两个属性都必需有。第八行开始定义一个path,它有一个属性id,通过这个id的值我们可以在后面引用这个path,参见第68行。目标(target)init(从14行到34行)定义了一些基本属性(property),主要是为了后面的target使用。在第38行,你会看到depends="init",depends是定义一个目标时的可选属性,它的意思是如果init目标没有执行(出错或其他原因),这个目标也不会被执行。

从第46行开始定义XMLc任务,到第58行结束,中间有很多参数嵌套在其中,srcdir指定源文件目录,sourceout指定输出目录,includes属性将源文件目录中的所有HTML文件包括进来。*为通配符。

<warnings param1="false"/>表示取消警告,<generate param1="both"/>表示同时产生接口和实现代码,例如:一个welcome.HTML,它会产生两个文件:WelcomeHTMLImpl.java,WelcomeHTML.java,WelcomeHTML.java中只定义了一个接口WelcomeHTML,真正的实现在WelcomeHTMLImpl.java中。<HTML_encoding param1="gb2312"/>表示设置编码,由于XMLc将HTML文件编译为java类,即使你在HTML文件中已经设置了编码,在java类中也不会有作用,必须在编译时设置编码。<arg name="ssi"/> <arg name="keep"/>这两句相当于在命令行上输入-ssi -keep.其中ssi参数是在编译HTML文件时将定义的ssi文件包括进来,见HTML目录下的welcome2.HTML源代码中有一行:<!--#include file="welcome.ssi"-->。keep参数会保留编译HTML文件后产生的java文件。第57行意思是将包更名,由于HTML文件在antDemo/presentation/HTML目录下,因此产生的java类属于antDemo.presentation.HTML包,我们通过new属性的值将属于此包的类改为属于新的包,使用XMLc时,一般以上几个参数就足够了,要想使用更多的参数,请参见XMLc task定义的源代码 。

从第63行到77行,目标(target)定义了编译时的细节,编译分为两部分,分别编译XMLc产生的java类和项目中的java类(表现层,商务层,数据层中的代码)。javac这个任务中,srcdir属性指定java文件存放位置,destdir属性指定编译后的class文件存放位置,classpathref属性指定classpath,debug属性设置关闭还是打开调试信息,includes属性起一个过滤作用,它指定编译那些文件,否则javac将会编译srcdir属性指定的目录下的所有java文件。

81行到91行开始将将程序中用到的其他文件也复制到目标目录,以便下一步打包。在copy任务中,todir属性指定目标目录,至于复制那些文件,则由嵌套在copy任务中的fileset任务来指定。在fileset中,dir指定基本目录,include和exclude属性用来过滤文件,符合条件的文件将会被复制到目标目录。

95行到98行开始将程序打包,jarfile属性指定打包后的文件名,basedir指定基本目录,基本目录下的文件及子目录都会按照其本来的组织结构放到jar文件中。

102行到113行,开始复制配置文件,配置文件包括AntDemo.conf,multiserver.conf,start.其中第112行,chmod任务将start文件的属性改为对任何人可执行和可读。

通过上面的讲解,你可能看出使用ant的优越性,ant可以方便的管理一个大型的enhydra项目,当然其他的项目也可以,重要的是,你可以很容易的对它的task进行扩充。相信越来越多的人会使用ant来进行项目的管理。

四:小技巧:
由于使用ant时可能出错,而屏幕不够大的话,可能看不清,最好将编译出错信息放入一个文件中,如下这样使用ant:
ant -buildfile build.XML -logfile error.log

就会将出错信息放入error.log中,由于使用buildfile参数,因此XML文件名不一定时build.XML,可以为任意XML 文件,如project.XML

本人的开发环境为:windows98+enhydra3.1+ant1.2+jdk1.2.2,redhat6.2+enhydra3.11b+ant1.2+jdk1.31。



】【关闭窗口
·上页:
·下页:
相关文章
     网站编程教程 - JSP环境配置
推荐教程Java程序编码标准!不仅仅是标准
推荐教程嘿嘿,在ibm上地用ant来管理en
推荐教程Java中文疑难详细解说
推荐教程Java学习之Java地运行环境
推荐教程漫谈Java程序地性能优化
推荐教程Java程序编码标准
推荐教程在red hat linux 10下安装 ecl
推荐教程Java程序地性能优化StringBuff
推荐教程Java 学习办法简单介绍
推荐教程ANT安装、配置
推荐教程java做地对比完善地FTP连接上传
推荐教程java Excel API简略介绍(翻译
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光