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

项目

   
内容:

-. 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。

时间: 2024-09-24 12:41:34

嘿嘿,在ibm上的用ant来管理enhydra项目的相关文章

使用IBM Rational Team Concert V2管理Scrum项目,第2部分: 规划和管理Sprint

在超过一年多的时间里,我们一直在使用 IBM Rational Team Concert 来支持我们的 Scrum 团队,享用它的特性,与它的缺点共存,并发展它的下一个版本.使用 IBM Rational Team Concert V2,Jazz 和 Rational Team Concert 团队可以向 Scrum 和敏捷评估.规划支持交付显著的改进(更不要去提更加改进的 Web 客户端以及许多其他新的特性). Sprint 规划 正如我们在本系列文章第一部分使用 IBM Rational T

使用IBM Rational Team Concert V2管理Scrum项目,第3部分

概述 在您开始之前 在您开始为 Scrum 开发使用 IBM Rational Team Concert 之前,您要确保对 Scrum 的基础知识有了一个通透的理解,并理解诸如 Product Backlog, Story Points 等等之类的术语.在本系列第一部分"创建项目.团队和计划"的开始部分,有对 Scrum 项目管理的简单介绍. 关于本系列 IBM Rational Team Concert 协作功能的广度,使得快速理解它并且使用起来得心应手,变成一项十分具体挑战性的工作

使用 IBM Bluemix 构建,部署和管理自定义应用程序

Bluemix 是由 IBM 实现的基于开放标准的云平台.它具有开放的架构,其允许组织能够在云上创建.开发和管理其应用程序.它基于 Cloud Foundry ,因此可以被视为平台即服务(PaaS).使用 Bluemix,开发人员不必关心云端配置,可以专注于他们的应用程序. 云端配置将由 Bluemix 自动完成. Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管理和查看服务和应用程序,同时还可以监控资源使用情况. 它支持以下编程语言: Java Python Ruby on R

如何在服务器上注册一个组件供多个项目使用?

问题描述 我的同一台服务器上放置了多个asp.net项目.这些项目某些功能具有共通性.于是我将相同的函数提取出来,生成一个类库:my.dll然后在各个web项目中引用它.一切正常.但是我的web项目有多个,每次更新my.dll都要将它复制到各个web项目的bin目录中.很是麻烦.有没有办法做法:my.dll不需放在各个web项目的bin目录下,而是放到诸如c:windowssystem32下,并在服务器上注册这个dll,然后该服务器中所有web项目都能正确引用之.谢谢. 解决方案 解决方案二:对

DockOne微信分享( 九十五):树莓派上的Docker集群管理

本文讲的是DockOne微信分享( 九十五):树莓派上的Docker集群管理[编者的话]随着IOT市场的火热发展,Docker天然的轻量级以及帮助业务快速重构的特性,将会在IOT领域迎来巨大发展潜力,甚至有可能会比它在云端的潜力更大.本文将致力于构建一个利用Rancher&RancherOS来管理运行在树莓派上的容器集群. 目前业界主流基本都是在x86架构上使用Docker,除了因为Intel在服务器领域的绝对领导地位之外,x86 CPU的确在性能上有着卓越的表现.但是近些年来,随着云计算的迅猛

澳大利亚是世界上最早制定互联网管理法律法规的国家之一

新华网悉尼6月10日电(报道员匡林)与其他西方国家相比,澳大利亚在互联网管理方面较为严格.联邦政府以法律为基础,与互联网服务提供商.家庭.学校等多方协同,力图过滤互联网不良信息,保障网络安全,尤其保护未成年人不受网络不良信息的侵害. 澳大利亚是世界上最早制定互联网管理法律法规的国家之一.<广播服务法><反垃圾邮件法><互联网内容法规>和<电子营销行业规定>等都为互联网管理提供了法律依据. 为加强互联网管理,澳大利亚政府将广播管理局和电信管理局合并,于2005

给ERP装上“BI大脑”企业绩效管理潮

一.中国企业绩效管理的"热潮" 1.绩效管理"满意度"不高 目前国内企业兴起了绩效管理的热潮,在这股热潮中绩效管理流行起KPI,但是企业在KPI的应用效果并不尽如意.据一份国际4大的调查:目前国内最常用的绩效管理类型是目标管理(MBO)和关键业绩指标体系(KPI),但是大部分被调查者对其公司的绩效管理系统表示不满意. 2."量化"考核决定一切 在目前企业的绩效管理中,"量化"压倒一切,企业把尽可能的绩效管理目标用数量进行表述,

云计算Top10:亚马逊称雄 微软IBM上榜

北京时间4月21日消息,据国外媒体报道,仅仅几年的时间,云计算已发展成为影响所有人日常生活的一种科技,比如个人文件的云储存,移动手机和平板 电脑通过云端来运行各类应用软件.而作为企业,IT部门从开始不信任云计算,到现在斥资数十亿美元来开布局云服务,这些都已说明云计算已经影响到整个世界. 美国科技博客网站Business Insider近期总结出了云计算领域最重要的10家公司,他们分别是: No1. 亚马逊 亚马逊是目前云计算领域当之无愧最重要参与者,因为这家公司从根本上发明了IaaS(基础设施即

RCP 简介及使用Ant 脚本部署 RCP 项目

背景介绍 RCP 简介 RCP(Rich Client Platform),即富客户端平台,是一个基于 Eclipse 的开源技术框架,它可以给开发人员提供丰富的 组件来构建一个应用,避免了从零开始的繁重开发任务,从而能够快速的完成应用程序的开发工作,开发人员就可以通过把 更多的精力放在业务组件开发上来摆脱枯燥的界面布局等开发工作.同时,RCP 也可以让从未有过插件开发的开发人员更容 易上手和了解插件开发的概念. Ant 简介 Ant 是用 Java 语言编写的项目管理工具.它可以通过构建 XM