|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开项目
内容:
-.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的长处远不止这些,它还很简单的集成到一些开辟情况中(比方visualage,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,到场上面三行
exportANT_HOME=/ant
exportJAVA_HOME=/jdk-1.2.2
exportPATH=${PATH}:${ANT_HOME}/bin
(2):Linux操纵体系
编纂/etc/profile大概用户目次下的.bashrc文件,到场上面三行
exportANT_HOME=/usr/local/ant
exportJAVA_HOME=/usr/local/jdk-1.2.2
exportPATH=${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.<?xmlversion="1.0"?>
2.<projectname="MyProject"default="dist"basedir=".">
3.<propertyname="dist"value="dist"/>
4.<targetname="init">
5.<mkdirdir="${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-buildfilebuild.xml
看一下你确当前目次下是不是多了一个dist目次。假如堕落,则多是你没有把ant设置好,拜见后面讲的安装及设置,看一下哪儿出了错。
3:build.xml文件
build.xml文件以下,个中有的正文和有关的代码删失落了,且做了一下小小的修改
1:<?xmlversion="1.0"?>
2:<projectdefault="app"basedir=".">
3:<!--到场xmlc义务-->
4:<taskdefname="xmlc"classname="org.apache.tools.ant.taskdefs.optional.enhydra.Xmlc"/>
5:<!--===================================================================-->
6:<!--设置编译的类路径-->
7:<!--===================================================================-->
8:<pathid="build.classpath">
9:<pathelementpath="${build.classes}"/>
10:</path>
11:<!--===================================================================-->
12:<!--初始化基础属性-->
13:<!--===================================================================-->
14:<targetname="init">
15:<!--Setupapplicationinfo-->
16:<propertyname="app.Name"value="AntDemo"/>
17:<propertyname="app.name"value="antDemo"/>
18:<propertyname="app.version"value="0.0.1"/>
19:<propertyname="app.year"value="2000"/>
20:<!--sourcecodeanddocumentinfo-->
21:<propertyname="src.dir"value="."/>
22:<propertyname="doc.dir"value="./doc"/>
23:<propertyname="lib.dir"value="./lib"/>
24:<!--packagetobejavadocs-->
25:<propertyname="packages"value="antDemo.*"/>
26:<!--buildinfo-->
27:<propertyname="build.dir"value="ant.build"/>
28:<propertyname="build.classes"value="${build.dir}/classes"/>
29:<propertyname="build.lib"value="${build.dir}/lib"/>
30:<propertyname="build.javadocs"value="${build.dir}/javadocs"/>
31:<propertyname="build.xmlc.dir"value="${build.dir}/xmlcout/"/>
32:<propertyname="build.debug"value="on"/>
33:<propertyname="dist.dir"value="./${app.name}-${app.version}"/>
34:</target>
35:<!--===================================================================-->
36:<!--创立要寄存编译厚的文件的目次-->
37:<!--===================================================================-->
38:<targetname="prepare"depends="init">
39:<mkdirdir="${build.dir}"/>
40:</target>
41:<!--===================================================================-->
42:<!--用XMLC工具编译html文件-->
43:<!--===================================================================-->
44:<targetname="xmlc"depends="prepare">
45:<mkdirdir="${build.xmlc.dir}"/>
46:<xmlcsrcdir="${src.dir}"
47:sourceout="${build.xmlc.dir}"
48:includes="**/*.html">
49:<!--elementnameissameascommandlineparameter-->
50:<warningsparam1="false"/>
51:<generateparam1="both"/>
52:<html_encodingparam1="gb2312"/>
53:<!--theoldargelementisstillsupported-->
54:<argname="ssi"/>
55:<argname="keep"/>
56:<!--prefixmapdopackagenamemapping-->
57:<prefixmapold="antDemo.presentation.html"new="antDemo.presentation"/>
58:</xmlc>
59:</target>
60:<!--===================================================================-->
61:<!--编译-->
62:<!--===================================================================-->
63:<targetname="compile"depends="xmlc,prepare">
64:<mkdirdir="${build.classes}"/>
65:<!--compileXMLCgeneratedjava-->
66:<javacsrcdir="${build.xmlc.dir}"
67:destdir="${build.classes}"
68:classpathref="build.classpath"
69:debug="${build.debug}"/>
70:<!--compilejavacodes-->
71:<javacsrcdir="${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:<targetname="extra"depends="init">
82:<mkdirdir="${build.classes}/${app.name}/presentation"/>
83:<copytodir="${build.classes}/${app.name}/presentation">
84:<filesetdir="${src.dir}/${app.name}/presentation">
85:<includename="**/*.gif"/>
86:<includename="**/*.jpg"/>
87:<includename="**/*.js"/>
88:<includename="**/*.CSS"/>
89:</fileset>
90:</copy>
91:</target>
92:<!--===================================================================-->
93:<!--创立lib目次,class文件及其他文件打包-->
94:<!--===================================================================-->
95:<targetname="jar"depends="extra,compile">
96:<mkdirdir="${build.lib}"/>
97:<jarjarfile="${build.lib}/${app.name}.jar"basedir="${build.classes}"/>
98:</target>
99:<!--===================================================================-->
100:<!--复制使用程序的设置文件-->
101:<!--===================================================================-->
102:<targetname="app"depends="jar,extra">
103:<!--dotheapp.conf-->
104:<copyfile="${src.dir}/${app.name}/${app.Name}.conf"todir="${build.dir}"/>
105:<!--dothemultiserver.conf-->
106:<filtertoken="OUTPUT"value="./"/>
107:<copyfile="${src.dir}/${app.name}/multiserver.conf.in"
108:tofile="${build.dir}/multiserver.conf"
109:filtering="on"/>
110:<!--dothestartscript-->
111:<copyfile="${src.dir}/${app.name}/start"todir="${build.dir}"/>
112:<chmodfile="${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文件包含出去。*为通配符。
<warningsparam1="false"/>暗示作废告诫,<generateparam1="both"/>暗示同时发生接口和完成代码,比方:一个welcome.html,它会发生两个文件:WelcomeHTMLImpl.java,WelcomeHTML.java,WelcomeHTML.java中只界说了一个接口WelcomeHTML,真实的完成在WelcomeHTMLImpl.java中。<html_encodingparam1="gb2312"/>暗示设置编码,因为xmlc将html文件编译为java类,即便你在html文件中已设置了编码,在java类中也不会有感化,必需在编译时设置编码。<argname="ssi"/><argname="keep"/>这两句相称于在命令行上输出-ssi-keep.个中ssi参数是在编译html文件时将界说的ssi文件包含出去,见html目次下的welcome2.html源代码中有一行:<!--#includefile="welcome.ssi"-->。keep参数会保存编译html文件后发生的java文件。第57行意义是将包改名,因为html文件在antDemo/presentation/html目次下,因而发生的java类属于antDemo.presentation.html包,我们经由过程new属性的值将属于此包的类改成属于新的包,利用xmlc时,一样平常以上几个参数就充足了,要想利用更多的参数,请拜见xmlctask界说的源代码。
从第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-buildfilebuild.xml-logfileerror.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。
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|