`
xyheqhd888
  • 浏览: 403712 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

Ant简介

阅读更多

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>

 

分享到:
评论

相关推荐

    ant简介及实例pdf

    ant简介,安装。通过一个实例说明ant在实际应用中的使用情况,非常适合初学者。

    关于ant简介及 配置

    ant简介及配置环境情况,有具体运行例子

    Ant简介(标签)

    Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道 make这个命令。当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,...

    Ant简介-----关于ant使用的简单教程

    Ant的安装配置和一般应用,可以满足一般的使用。

    ant简介

    NULL 博文链接:https://zsjzsj-2009.iteye.com/blog/661604

    Ant基本应用教程学习

    ANT简介 安装Apache Ant 验证Apache Ant的安装 安装 Eclipse Ant构建文件 Ant属性任务 Ant属性文件 Ant数据类型 Ant构建项目 Ant构建文档 Ant创建JAR文件 Ant创建WAR文件 Ant打包应用 Ant部署应用程序 Ant执行Java...

    ant基础知识介绍

    ant简介,包含ant的安装下载,简单的例子,以及ant标签的介绍和实例

    ant实验使用简介part6

    主要介绍了ant的使用方法。

    ant实验使用简介part4

    主要介绍了ant的使用方法。

    Ant权威指南.rar

    Ant简介 Ant是一个类似make的工具,用来编译/运行/测试java程序。 构建、包装和发布过程中几乎每一件事都可以由Ant的任务来处理. 二.Ant的安装及配置 你可以从Jakata网站下载预编译的ANT,解压至任一目录; ...

    ant实验使用简介part1

    主要介绍了ant的使用方法。

    ant实验使用简介part7

    主要介绍了ant的使用方法。

    java Ant 教程

    ANT-build.xml简介2011-01-19 10:25Ant的优点 Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。 1.跨平台性。Ant是纯Java语言编写的,所示具有很好的跨平台性。 2.操作简单。Ant是由一个内置...

    Ant快速入门知识简介

    Ant的全名是 Another Neat Tool,是由James Duncan Davidson 在 觉得 Make 工具无法满足他的 Java 构建(Build)需求下所编写出来的工具,目前由Apache Software Foundation 持续进行开发。

    Ant学习教程

    Ant,用于对Java项目进行构建。Ant简介,常用任务,整合Junit,生成doc和zip文件。

    Ant命令的简介应用之快速入门

    Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。

    《良葛格Java JDK 5.0学习笔记》.rar

    包含java特性、java学习方法、网络资源汇总、jdk下载和安装、path与CLASSPATH的设置、java基本语法、关于对象的认识、数组、字符串(String类))、Ant简介、JUnit简介。 作者:林信良(网络化名良葛格) 学历:台湾大学...

    Eclipse+Web开发从入门到精通(实例版)

    4.1 Ant 简介... 60 4.1.1 构造文件的主要标记... 60 4.1.2 Ant 的常用任务(Task)... 62 4.2 Eclipse 与Ant 的集成... 64 4.2.1 创建Ant 构建文件... 64 4.2.2 编辑Ant 构建文件... 64 4.2.3 ...

    Apache Ant自动化脚本入门教程及常用命令介绍

    一 Ant简介 Apache Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的自动化构建。它是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点: 跨平台性。Ant是纯...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的工作 7.3.2 配置文件build.xml 7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章...

Global site tag (gtag.js) - Google Analytics