- 浏览: 409250 次
- 性别:
- 来自: 秦皇岛
最新评论
-
prayjourney:
了解了,讲的不错
DataInputStream和DataOutputStream类 -
niunianss:
将字节退回的时候,需要添加判断,最后一个字符是英文时,实际数组 ...
PushbackInputStream -
cctt_1:
不要误人子弟,那根本就不是 解释器模式!!!那是Composi ...
Interpreter(解释器)模式 -
java-大神:
[i][i]引用引用引用引用[/img][/img][/img ...
BufferedReader和BufferedWriter -
百合不是茶:
你的程序在文件输入输出流中传入agrs[0]时,会报错越界 ...
DataInputStream和DataOutputStream类
1. Ant可以自动完成的任务:
(1)编译Java源代码;
(2)建立jar、war、zip文件;
(3)自动测试与生成报告;
(4)从CVS等管理系统取得源代码。
2. Ant相关网站:
Ant官方网站:http://ant.apachye.org/
Ant使用者手册:http://ant.apache.org/manual/index.html.
3. 第一个Ant构建:
Ant通过buildfile来进行构建,它是一个XML文件,默认命名为build.xml。
在Ant的buildfile中可以定义构建项目时的属性(Property)、任务(Task)。一个build.xml中可以定义多个任务,这些任务可能是建立目录、编译Java源代码、复制文件、删除文件、产生doc文件、进行测试、产生测试报告等,它们通常组织为一个目标(Target)。
这里以一个简单的HelloWorld程序来示范如何建立buildfile,并大致了解属性、任务与目标的作用。虽然HelloWorld程序使用Ant来构建过于夸张,但可以作为一个快速了解Ant的例子。先在D:\workspace\HelloWorld\src目录中编写文件:
package ysu.hxy; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
描述一下即将进行的工作。假设打算要编译src中的HelloWorld.java,编译后的.class将保存至C:\workspace\HelloWorld\classes目录中,如果classes目录不存在就建立它,每一次编译前将bin中前一次编译的.class复制到C:\workspace\HelloWorld\bak目录作备份,如果bak目录不存在就建立它,最后执行HelloWorld程序。在C:\workspace\HelloWorld下编辑build.xml如下:
<?xml version="1.0"?> <project name="example" default="run"> <property name="src.dir" value="src"/> <property name="classes.dir" value="classes"/> <property name="bak.dir" value="bak"/> <target name="prepare"> <mkdir dir="${classes.dir}"/> <mkdir dir="${bak.dir}"/> <copy todir="${bak.dir}"> <fileset dir="${classes.dir}"/> </copy> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <target name="run" depends="compile"> <java classname="ysu.hxy.HelloWorld"> <classpath path="${classes.dir}"/> </java> </target> </project>
<project>中包括数个<target>,每个<target>有一个名称,默认<project>的进入点为run任务,而run任务的完成依赖于compile任务的完成,compile任务的完成依赖于prepare任务的完成。所以在构建开始时,会先执行prepare任务,完成后再执行compile任务,最后执行run任务。
<property>标签可以让您设定一些在构建项目时的常用属性值,每个属性值会有一个名称对应。对此例而言,设定了程序代码来源位置、编译结果的目标目录与备份目录。
一个构建中可以包括数个<target>,在此例中主要有3个<target>:编译前的准备工作、进行编译、执行。在编译之前先建立所需要的目录,如果目录已经存在就自动跳过该项工作,然后复制前一次编译的.class文件至bak目录。接下来进行编译,可以指定编译的源文件来源与目标,然后执行程序。
编辑好build.xml之后,在文字模式下直接执行ant指令即可开始构建项目,ant默认会读取同一个目录下的build.xml。第一次执行ant时会出现以下的文字提示构建过程。
D:\workspace\HelloWorld>ant
Buildfile: build.xml
prepare:
[mkdir] Created dir: D:\workspace\HelloWorld\classes
[mkdir] Created dir: D:\workspace\HelloWorld\bak
compile:
[javac] Compiling 1 source file to D:\workspace\HelloWorld\classes
run:
[java] Hello World!
BUILD SUCCESSFUL
Total time: 1 second
完成构建之后,会自动产生classes目录与bak目录。如果打算单独执行某个任务,则在执行ant指令时写出指定的任务名即可。例如:
D:\workspace\HelloWorld>ant compile
Buildfile: build.xml
prepare:
[copy] Copying 1 file to D:\workspace\HelloWorld\bak
compile:
[javac] Compiling 1 source file to D:\workspace\HelloWorld\classes
BUILD SUCCESSFUL
Total time: 1 second
4. 任务(Target):
在构建程序时,有些目标所定义的任务可能是可选的,您可以通过在设定<target>时设定一个条件,并在构建时指定该条件为true或false,以决定该目标是否要执行。例如可以这么设定:
<target name="someTarget" if="conditional"> some task... </target>
使用if设定条件目标时,表示只有在conditional被设置时才会被执行。在执行ant指令时,就可以像下面这样来决定someTarget是否要执行:
ant -buildfile build.xml -Dconditional=true
也可以使用unless来设定条件目标:
<target name="someTarget" unless="conditional"> some task... </target>
由于使用了unless来设定条件目标,所以只有在confitional没有被设定时,目标才会被执行。
由于ant可以在一个buildfile中调用另一个buildfile,在调用的时候,两个buildfile之间可能会有一些重复的属性设定。如果要避免某个属性被重复设定了,可以这么编写:
<target name="setProperties" unless="setProperties"> <proporty name="someProperty" value="someValue"/> ... </target>
可以在一个buildfile中调用另一个buildfile。一个简单的例子如下:
<project name="someProject" default="all"> ... <target name="someTarget" depends="otherTarget"> <ant antfile="./project2/build.xml"> <property name="condition_name" value="true"/> </ant> </target> ... </project>
在<property>中设定value="true",当在另一个buildfile中有目标使用了条件式(if或unless)时,这可以给予该条件一个true的特性值。
由于默认的buildfile名称是build.xml,所以也可以只指定项目的目录来调用默认的build.xml,如下:
<project name="someProject" default="all"> ... <target name="someTarget" depends="otherTarget"> <ant antfile="./project2"> <property name="condition_name" value="true"/> </ant> </target> ... </project>
也可以仅仅调用另一个buildfile中的某个目标,如下:
<ant antfile="./project2/build.xml" target="prepare">
5. 属性(Property)
可以使用<property>标签来定义属性。例如:
<property name="src.dir" value="src"/> <property name="classes.dir" value="classes"/> <property name="bak.dir" value="bak"/>
属性都是由name/value组成的,如果在执行时没有特别指定属性值,则默认都是使用value上定义的值,如果要指定某个属性,则可以执行ant。例如指定classess.dir:
ant -Dclasses.dir="WEB-INF/classes"
也可以使用<property>取得环境变量,例如下面的buildfile尝试取得JAVA_HOME环境变量并显示它,如果没有设定这个环境变量,则会显示没有设定该环境变量的信息:
<?xml version="1.0"?> <project name="envSample" default="deploy" basedir="."> <!-- Set up the "env" prefix for environment variables--> <property environment = "env"/> <target name="checkJavaHome" unless="env.JAVA_HOME"> <fail message="JAVA_HOME must be set!"/> </target> ...... </project>
也可以设定一个.properties文件,之后在buildfile指定运行ant时加载它。方法如下:
<property file="local.properties"/>
也可以通过ant执行buildfile时将指定的属性设定为系统环境变量。例如:
<sysproperty key="JAVA_HOME" value="${javaHome}"/>
还有一些方法可以取得系统属性。例如下面的方式可以取得使用者目录:
<echo message="user.home = ${user.home}"/>
6. 路径(Path)
使用Ant可以轻易地管理Classpath的设定问题。可以使用<path>来管理路径参考,使用<pathelement>来指定目录或jar文件。例如:
<path id="1"> <pathelement location="."/> <pathelement location="./lib/junit.jar"/> </path>
上面的例子也可以使用分号设定一系列的位置。例如:
<path id="1"> <pathelement location=".;./lib/junit.jar"/> </path>
也可使用<fileset>来指定某个目录下的文件。例如:
<path id="2"> <fileset dir="lib"> <include name="**/*.jar"/> </fileset> </path>
<include>或<exclude>标签用来包括或排除文件(或是可以使用includes、excludes属性设定),可以在上面使用*表示零个或多个字符符合,?表示符合一个字符。
之后在进行<javac> 任务时,可以使用<classpath>标签像下面这样引用之前所设定的路径:
<javac srcdir="./src" destdir="./classes"> <classpath refid="1"/> </javac>
也可以在进行<javac>任务时直接使用<pathelement>标签来指定Classpath。例如:
<javac srcdir="./src" destdir="./classes"> <classpath refid="1"> <pathelement location="."/> <pathelement location="./lib/junit.jar"/> </classpath> </javac>
7.常用任务(Task)
(1)设定属性:
当在编写build.xml时发现到一些属性设定出现过两次以上,例如目录的指定,可以将这些属性使用<property>加以设定,以后若要改变属性设定,就只要改变对应的<property>即可,不必在build.xml中来回搜索与修改。例如:
<target name="setProperties"> <property name="src.dir" value="src"/> <property name="classes.dir" value="classess"/> <property name="lib.dir" value="lib"/> <property name="backup.dir" value="bak"/> <property name="jar.file" value="${lib.jar}/JNameIt.jar"/> </target>
(2)提供help信息:
可以提供一些ant构建时的help信息。例如:
<target name="help" description="Type ant help for detail."> <echo message="Help information!!!"/> <echo>Help! Help!</echo> <echo><![CDATA[ Here is a help info. Write your own information here. ]]></echo> </target>
CDATA表示提供字符信息(Character Data),在![CDATA["与"]]之间的文字可以使用自由格式编写,适用于比较长的信息文字的显示。
在执行ant时加上-projecthelp或-p就会自动显示help这个<target>上的内容。如果<target>上加有description属性,当使用ant -projecthelp时也会一并显示该信息。一个执行的例子如下:
D:\workspace\HelloWorld>ant -p
Buildfile: build.xml
Main targets:
help Type ant help for detail.
Default target: run
要显示详细信息,则需运行ant时指定help这个<target>。下面介绍如何显示详细信息:
D:\workspace\HelloWorld>ant help
Buildfile: build.xml
help:
[echo] Help information!!!
[echo] Help! Help!
[echo]
[echo] Here is a help info.
[echo] Write your own information here.
[echo]
BUILD SUCCESSFUL
Total time: 0 seconds
(3)文件的复制、建立与删除:
在每次构建程序前,会备份前一次的构建结果,可以使用<copy>标签来指定要复制的文件。例如:
<target name="backup"> <copy todir="${backup.dir}"> <fileset dir="${classes.dir}"/> </copy> </target>
在构建程序时,可以使用<mkdir>标签建立一些必要的目录。例如:
<target name="prepareDir" description="prepare necessary dirs"> <mkdir dir="${classes.dir}"/> <mkdir dir="${lib.dir}"/> <mkdir dir="${backup.dir}"/> </target>
(4)编译程序:
可以在编译程序时,加入一些Classpath的指定,这是一个相当方便的功能。例如:
<target name="compile" description ="Compile the source files"> <javac srcdir="./src" destdir="${classes.dir}"> <classpath> <fileset dir="${lib.dir}"> <include name="**/*.jar"/> </fileset> </classpath> </javac> </target>
(5)执行程序:
<java>标签用来执行Java程序。例如:
<java classname="ysu.hxy.HelloWorld"> <classpath path="."/> </java>
(6)制作jar文件:
可以使用<jar>标签将编译完成的文件打包为.jar文件(Java Archive File),并可以指定 MANIFEST文件,例如:
<target name="jar"> <mkdir dir="${libDir}"/> <jar jarfile="${libDir}/${jarFile}" manifest="META-INF/MANIFEST.MF" basedir="${lib.dir}"/> </target>
如果提供有MANIFEST.MF文件,才需要设定manifest属性。为了完成jar打包的任务,可以在META-INF目录下提供一个MANIFEST.MF文件。例如:
Manifest-Version: 1.0
Created-By: hxy
Main-Class: ysu.hxy.HelloWorld
Class-Path: HelloWorld.jar
此时build.xml文件如下:
<?xml version="1.0"?> <project name="example" default="run"> <property name="src.dir" value="src"/> <property name="classes.dir" value="classes"/> <property name="bak.dir" value="bak"/> <property name="lib.dir" value="lib"/> <target name="help" description="Type ant help for detail."> <echo message="Help information!!!"/> <echo>Help! Help!</echo> <echo><![CDATA[ Here is a help info. Write your own information here. ]]></echo> </target> <target name="prepare"> <mkdir dir="${classes.dir}"/> <mkdir dir="${bak.dir}"/> <copy todir="${bak.dir}"> <fileset dir="${classes.dir}"/> </copy> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <target name="run" depends="compile"> <java classname="ysu.hxy.HelloWorld"> <classpath path="${classes.dir}"/> </java> </target> <target name="jar"> <mkdir dir="${libDir}"/> <jar jarfile="${libDir}/${jarFile}" manifest="META-INF/MANIFEST.MF" basedir="${classes.dir}"/> </target> </project>
执行ant时可以指定任务与提供lib目录及jar文件的名称。例如:
D:\workspace\HelloWorld>ant jar -DlibDir=lib -DjarFile=HelloWorld.jar
Buildfile: build.xml
jar:
[jar] Building jar: D:\workspace\HelloWorld\lib\HelloWorld.jar
BUILD SUCCESSFUL
Total time: 0 seconds
这里的设定所建立的jar由于包括Main-Class设定,而指定的类别中有main(),所以可以直接执行。例如:
D:\workspace\HelloWorld\lib>java -jar HelloWorld.jar
Hello World!
7. 制作War文件:
对于网站应用程序的部署,可以使用<war>标签将所有相关的文件包装为war(Web Application Archive)文件。例如:
<target name="war"> <war destfile="dist/guestbook.war" webxml="src/webapp/WEB-INF/web.xml"> <classes dir="target/classes"/> <lib file="beantools.jar"/> </war> </target>
8. 一个简单的buildfile,你可以根据实际需求来作修改。
<?xml version="1.0"?> <project name="example" default="run"> <property name="src.dir" value="src"/> <property name="classes.dir" value="classes"/> <property name="bak.dir" value="bak"/> <target name="help" description="Type ant help for detail."> <echo message="Help information!!"/> <echo>Usage:</echo> <echo><![CDATA[ build: ant ant build.xml produce jar: ant jar -DlibDir=lib -DjarFile=HelloWorld.jar You must produce META-INF/MANIFEST.MF. ex: ****************************************** Manifest-Version: 1.0 Created-By: caterpillar Main-Class: onlyfun.caterpillar.HelloWorld Class-Path: HelloWorld.jar ****************************************** ]]></echo> </target> <target name="jar"> <mkdir dir="${libDir}"/> <jar jarfile="${libDir}/${jarFile}" manifest="META-INF/MANIFEST.MF" basedir="${classes.dir}"/> </target> <target name="prepare"> <mkdir dir="${classes.dir}"/> <mkdir dir="${bak.dir}"/> <copy todir="${bak.dir}"> <fileset dir="${classes.dir}"/> </copy> </target> <target name="compile" depends="prepare"> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <target name="run" depends="compile"> <java classname="ysu.hxy.HelloWorld"> <classpath path="${classes.dir}"/> </java> </target> </project>
发表评论
-
内部类总结
2009-11-27 14:28 1222一、方法及作用域内的内部类:1.在一个方法内定义的类2.在一个 ... -
finalize()方法终结条件验证 示例代码
2009-09-20 09:23 1348package Initialization; clas ... -
Proxy(代理)模式二
2009-05-15 21:16 15532. 重新思考图像代理: 现在需要思考设计模式是否 ... -
Junit简介
2009-04-08 17:46 16491. 单元测试(Unit Test) 一个单元(Un ... -
专题制作--文字编辑器(文字编辑与保存)
2009-04-08 10:43 22151. 文字编辑与保存: (1). 打开文件的处理流 ... -
专题制作--文字编辑器(逻辑实现部分)
2009-04-07 22:35 19061. 事件处理: 在Java中事件以具体的对象来表 ... -
专题制作--文字编辑器(接口部分)
2009-04-07 20:28 21491. Swing入门: 若要使用J2SE来开发窗口应用 ... -
信息绑定(国际化处理)
2009-04-07 20:02 15841. 程序中的一些文字信息可以将之定义在一个属性文件中,而不定 ... -
日志(Logging)
2009-04-07 16:14 17271. 日志(Logging) 程序不免会出现错误,当 ... -
Java中的日期和时间
2009-04-07 11:26 19581. 使用Date: 使用System.cu ... -
meta-annotation
2009-04-07 09:23 30811. 所谓meta-annotation就是Annotati ... -
Annotion
2009-04-06 23:05 16831. Annotation对程序运行没有影响,它的目的在于对编 ... -
使用反射生成与操作对象(二)
2009-04-06 17:04 17561. 修改成员值: 尽管直接存取类的域成员是不被鼓励的 ... -
使用反射生成与操作对象(一)
2009-04-06 15:16 21091. 使用反射机制,可以在运行时期动态加载类并生成对象,操作对 ... -
Java中的反射(二)
2009-04-06 10:42 20761. 当在命令行模式下执行java XXX.class 指令后 ... -
Java中的反射(一)
2009-04-06 09:43 13921. Java提供的反射机制允许您在运行时动态加载类、查看类信 ... -
容器类的线程安全及ThreadLocal类
2009-04-05 21:28 30571. 容器类默认没有考虑 ... -
wait()和notify()
2009-04-05 19:06 13711. wait()、notify()、notifyAll() ... -
Java线程之同步化(Synchronized)主题
2009-04-05 16:44 27141. 如果一个对象所持有的数据可以被多线程同时共享存取,必须 ... -
Java线程(三)
2009-04-05 15:37 18921. Java中的每个线程都 ...
相关推荐
在这个“ant简介及实例pdf”中,我们将会探讨Ant的基本概念、安装步骤以及一个实际应用的示例。 首先,让我们了解一下Ant的基本概念。Ant是一个基于任务驱动的构建工具,它的核心是构建文件(通常命名为build.xml)...
### Ant简介 #### 一、Ant概述 Ant是一款开源的Java构建工具,它主要用于构建Java应用程序,同时也支持其他类型的项目构建。与传统的构建工具(如make、gnumake和nmake)相比,Ant的设计更加现代化且具备良好的跨...
Ant是Apache软件基金会下的一个Java构建工具,它以其XML配置文件为核心,用于自动化构建Java项目。这个工具在软件开发过程中起到了关键的角色,特别是在构建、测试和部署应用时。本篇文章将深入探讨Ant的基本概念、...
Ant 是一个基于Java的构建工具,它主要用于自动化软件项目的构建过程,如编译源代码、打包、测试等。Ant 的核心理念是通过XML格式的构建脚本来定义项目构建的各个步骤,使得开发者能够以声明式的方式描述项目构建的...
1. **Ant简介** - Ant是一个基于Java的构建工具,它简化了软件项目的构建过程,特别是Java项目。 - 它的核心概念是任务(Task),这些任务是由Ant提供的或者由用户自定义的,用于执行各种构建操作,如编译、复制、...
Ant是Java开发中的一款自动化构建工具,类似于Unix的make,主要负责编译、运行、打包Java程序等构建过程。它的核心由Project、Target和Task三个主要部分组成。 1. Project(项目) Project是Ant的基本组织单元,...
1. **Ant简介**:解释Ant是什么,为什么需要它,以及它在软件开发中的角色。 2. **Ant基本结构**:介绍构建文件`build.xml`的结构,包括项目(project),目标(target),任务(task),以及属性(attributes)等元素。 3...
#### 一、Ant简介 **Ant**是一款开源的Java构建工具,主要用于自动化构建过程,如编译、测试、部署等。它最初由James Duncan Davidson开发,现归属于Apache软件基金会。 ##### 1.1 什么是Ant? - **Ant**是一个用...
一、Ant简介 Ant是Apache软件基金会开发的一个Java项目构建工具,它的设计目标是简化项目构建过程,提供一种跨平台的解决方案。Ant的主要优点在于其灵活性和可扩展性,通过自定义任务和宏定义,可以实现各种复杂的...
### 一、Ant简介 Ant是一个开源的Java编译和构建工具,它以XML文件形式接受指令,这使得Ant不仅可扩展,而且易于维护。其平台独立性——完全由Java编写——意味着无论是在Windows、Linux还是其他操作系统上,Ant都...
1. **Ant简介** Apache Ant是一个由Apache软件基金会开发的任务驱动的构建工具。它的设计理念是"一切都是文件",通过XML文件(通常称为build.xml)来描述构建过程。这使得构建过程可移植且易于维护。 2. **Ant ...
#### ANT简介 ANT是Apache提供的一款专为Java开发者设计的强大构建工具。作为一款开源软件,ANT支持跨平台操作,在Windows和Unix操作系统上均可运行。相较于传统的shell脚本构建工具(例如make或makefile),ANT...
#### 一、Ant简介与特点 Ant是Apache旗下的一款强大的构建工具,主要用于Java项目的自动化构建过程,如编译、测试、打包、部署等操作。它的核心优势在于其高度的可定制性和灵活性,使得开发者能够通过简单的XML配置...
#### 一、Ant简介 Apache Ant,全称为Another Neat Tool,是一种基于Java的构建工具,旨在提供一种比传统构建工具如Make更灵活、可移植的解决方案。Ant的设计哲学在于克服Make工具的局限性,尤其是在跨平台开发中的...
1. **Ant简介** Ant是一个基于Java的构建工具,它的设计目标是简化Java项目构建过程,通过XML描述构建脚本来实现自动化任务。它不受任何特定IDE的限制,可以在任何支持Java的环境中运行。 2. **Ant的基本结构** ...
#### 一、Ant简介与基本概念 Apache Ant 是一个Java环境下的开源项目构建工具,主要用于自动化构建、部署等任务。它使用XML来描述构建过程,并且提供了丰富的任务(task)集合,能够简化项目构建流程。Ant的核心优势...
#### 二、Ant简介与安装 **1. Apache Ant简介** Apache Ant是一款开源的Java构建工具,它通过XML文件定义构建过程,可以用来编译、调试、测试和部署Java应用程序。Ant提供了丰富的内置任务(task),支持多种任务的...