`
javasee
  • 浏览: 961123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用ant来管理项目

阅读更多
用ant来管理项目



内容:

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




本文描述了ant的基本语法及其如何应用于项目的管理
-. 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管理项目
1:基本的文件目录结构 解压到任意目录,我们可以看到目录树结构如下
├─bin
├─docs
│ ├─ant2
│ ├─api
│ │ └─org
│ │ └─apache
│ │ └─tools
│ │ ├─ant
│ │ │ ├─taskdefs
│ │ │ │ ├─compilers
│ │ │ │ └─optional
│ │ │ │ ├─clearcase
│ │ │ │ ├─depend
│ │ │ │ │ └─constantpool
│ │ │ │ ├─dotnet
│ │ │ │ ├─ejb
│ │ │ │ ├─ide
│ │ │ │ ├─javacc
│ │ │ │ ├─jlink
│ │ │ │ ├─jsp
│ │ │ │ ├─junit
│ │ │ │ ├─metamata
│ │ │ │ ├─net
│ │ │ │ ├─perforce
│ │ │ │ ├─scm
│ │ │ │ ├─sound
│ │ │ │ └─vss
│ │ │ ├─types
│ │ │ └─util
│ │ │ └─regexp
│ │ ├─mail
│ │ └─tar
│ └─manual
│ ├─CoreTasks
│ ├─CoreTypes
│ ├─Integration
│ └─OptionalTasks
└─lib





在这个目录树结构中,与传统的项目不同的是,我们用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可以方便的管理一个大型的项目,当然其他的项目也可以,重要的是,你可以很容易的对它的task进行扩充。相信越来越多的人会使用ant来进行项目的管理。

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

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

相关推荐

    用Ant实现Java项目的自动构建和部署

    标题“用Ant实现Java项目的自动构建和部署”指的是利用Apache Ant工具来自动化Java应用程序的编译、打包和部署过程。Apache Ant是一个基于XML的构建工具,它允许开发者定义任务序列,以便在没有人类干预的情况下执行...

    ant 管理整个项目的编译和运行

    通过Ant,开发者能够高效地管理项目的编译、测试、部署等构建流程。 #### 安装Ant 1. **下载Ant** 首先需要从Apache官方网站下载最新的Ant二进制发布版,如`apache-ant-1.8.2-bin.zip`。 2. **配置环境变量** ...

    ant build 项目实例

    总结来说,“ant build 项目实例”涉及到的关键知识点包括Ant构建文件`build.xml`的结构和任务定义,`build_ODC.properties`中的项目配置管理,以及Ant如何处理构建过程中的各种操作,如编译、测试、打包和依赖管理...

    Ant 项目构建教程

    Ant 是一个由 Apache 开发的 Java 项目构建工具,它简化了构建、编译、测试和部署Java应用程序的过程。...此外,Ant还支持通过`property`元素定义和使用属性,可以方便地进行配置管理和跨平台构建。

    基于MyEclipse开发平台的利用ant来发布项目

    在Java开发中,MyEclipse是一个强大的集成开发环境...总的来说,结合MyEclipse和Ant,开发者能够高效地管理项目构建和部署流程,提高开发效率。通过持续优化和完善`build.xml`,可以进一步提升项目的可维护性和一致性。

    Ant项目配置与测试用例管理

    总结来说,Ant项目配置与测试用例管理是Java开发中不可或缺的部分。Ant提供了灵活的构建机制,而TestNG则为测试提供了强大的支持。理解并熟练运用这两者,能够提升项目开发的效率和质量。通过实践和研究"Ant_TestNG_...

    项目Ant配置实例一次下载各处使用

    首先,我们来看标题“项目Ant配置实例一次下载各处使用”。这表明我们将学习如何创建一个可复用的Ant构建脚本,该脚本可以在不同的项目或环境中稍作调整后立即使用。Ant的配置主要体现在它的构建文件`build.xml`中,...

    ant ant ant ant

    "Ant ant ant antant ant ant antant ant ant ant" 这个描述可能是在强调Ant在项目构建过程中的重复性和不可或缺性,暗示着它在工程中的频繁使用和核心地位。 Ant的设计理念是“一切都是XML”,它通过XML格式的构建...

    Ant多渠道 多项目引用 打包Android项目

    本主题将深入探讨如何利用Ant进行多渠道打包和管理多个项目引用,这对于大型复杂项目或者需要针对不同市场发布不同版本的应用至关重要。 首先,Ant是Apache组织开源的一款Java构建工具,它基于XML文件定义构建过程...

    用ant来解压文件

    总的来说,使用Ant解压文件是软件开发中自动化流程的一个方面,它可以帮助开发者更高效地管理项目资源,提升工作效率。通过配置Ant构建文件,你可以定制化你的构建过程,以适应各种需求,无论是简单的解压任务还是...

    使用ANT远程发布Web项目

    本文主要介绍如何使用Apache Ant来实现Web项目的自动化打包并远程部署到Tomcat服务器上。 #### 二、准备工作 1. **环境配置** - **Eclipse IDE**:用于编写和构建项目。 - **Apache Ant**:用于自动化构建过程。...

    Vue3+Vite+Ant Design 后台管理系统模板.zip

    Vue3+Vite+Ant Design 后台管理系统模板是一个现代且高效的前端开发框架组合,用于构建功能丰富的...总的来说,Vue3+Vite+Ant Design 后台管理系统模板是一个理想的起点,适合那些希望高效开发后台管理应用的开发者。

    ant编译java工程

    标题 "ant编译java工程" 涉及到的是使用Apache Ant工具来构建Java应用程序的过程。Apache Ant是一个基于XML的...了解并熟练掌握这些知识点,开发者可以有效地使用Ant来管理Java项目,提高开发效率和项目的可维护性。

    基于antdesign和vue的中后台管理框架

    标题中的“基于antdesign和vue的中后台管理框架”指的是一个使用Ant Design Vue库和Vue.js框架构建的后端管理界面解决方案。Ant Design Vue是阿里巴巴团队开发的一个UI组件库,它将蚂蚁金服的Ant Design设计语言移植...

    ant项目模板

    《Ant项目模板详解:快速构建Java项目的基石》 在软件开发过程中,项目初始化阶段往往需要耗费不少时间。为了提高效率,开发者通常会采用项目模板,它预设了基础的项目结构和规范,使得新项目的创建变得简单快捷。...

    blazor后台管理框架,AntDesign风格

    在这个“blazor后台管理框架,AntDesign风格”的项目中,我们可能会看到以下文件结构: - `Pages`:包含Blazor页面组件,如登录、修改密码、退出等功能对应的.Razor文件。 - `Services`:存放业务逻辑和服务类,如...

    13_ant_发布web项目和操作数据库

    本主题将深入探讨如何使用Ant来发布Web项目以及进行数据库操作。 一、Ant的基本概念与配置 1. Ant是基于XML的,它的主要配置文件是`build.xml`,其中定义了一系列的构建任务(tasks)。 2. Ant的核心组件包括项目...

    Vue3+Vite+TypeScript+Ant Design Vue+Pinia等主流技术的后台管理系统项目.zip

    Vue3+Vite+TypeScript+Ant Design Vue+Pinia是一个现代前端开发的组合,用于构建高效、可维护的后台管理系统。这个项目充分利用了这些技术的优势,提供了丰富的功能和优化的开发体验。以下是对这些技术及其在后台...

Global site tag (gtag.js) - Google Analytics