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

ANT及build.xml文档编写

    博客分类:
  • java
阅读更多
[color=green]
为了批量编译java文件,今天学习了ANT(Another Neat Tool另一个整洁的工具,http://www.apache.org/)及build.xml文档的编写,找了篇文章,先学习模仿~~

Ant是一个基于Java的生成工具,类似于C中的make,但比make优越,与其它大多数Build工具相比较,Ant的两个特性决定了它是一款优秀的Build工具:

1. 基于Java的实现。具有良好的跨平台性,同时可以通过增加新的Java类来扩展Ant的功能,而无需去了解不同平台上不同的脚本语言。

2.基于XML的配置文件。Ant以XML树来描述Target/Task的关系,文件结构清晰、易读易写,并且利用XML对格式的控制来避免由于配置文件的错误造成的Build操作失败。

ANT下载地址:http://apache.mirror.phpchina.com/ant/binaries/apache-ant-1.7.0-bin.zip

安装与配置

Ant的安装非常简单,把从网上下载的jakarta-ant-1.5.1-bin.zip解开到一个目录下即可(以下假定安装在目录D:\jakarta-ant-1.5.1)。接下来需要进行环境变量配置: SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安装目录,不是bin子目录
SET PATH=%PATH%;%ANT_HOME%\bin;


在配置环境变量之前,请确认已经正确设置了JAVA_HOME系统变量。输入ant命令,看到如下输出说明已成功安装了Ant工具:

Buildfile: build.xml does not exist!
Build failed


提示信息表明在当前目录不存在build.xml配置文件,但这本身已经说明Ant成功运行了。

快速入门

下面用一个最简单也是最经典的例子-HelloWorld来感受一下Ant吧。

//HelloWorld.java
package com.sharetop.antdemo;
public class HelloWorld {
public static void main( String args[] ) {
System.out.println("Hello world. ");
}
}


要让Ant编译这个文件,首先需要编写一个Build配置文件。在一般情况下,这个文件被命名为build.xml。

<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir="." >
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello.jar" />
<target name="init">
<mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
<java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/>
</target>
</project>


来看一下这个文件的内容,它描述了以下信息:工程的名字为HelloWorld,工程有四个target,分别是init、compil、build和run,缺省是run。compile只有一个任务javac,源文件位于src目录下,输出的类文件要放在classes目录下。build的任务是jar,生成的jar文件为hello.jar,它打包时以classes为根目录。而run则是执行这个HelloWorld类,用hello.jar作为classpath。这四个target之间有一个依赖关系,这种关系用depends来指定。即如果Target A依赖于Target B,那么在执行Target A之前会首先执行Target B。所以从下面运行缺省Target(run)的输出看,这四个Target的执行顺序是:init→compile→build→run。文件目录结构如图1所示。HelloWorld.java文件在src\com\sharetop\antdemo子目录下。




图1 ant_demo应用的目录结构



在命令行输入命令:
如果配置文件名不是build.xml,比如是build_front.xml,那么,可以使用-buildfile命令参数指定:

G:\myDoc\ant_demo>ant -buildfile build_front.xml


也可以单独执行指定的某个target,比如,只编译不打包执行,可以使用下面输入命令即可:

G:\myDoc\ant_demo>ant compile

在相应的目录下会找到编译出的HelloWorld.class文件。

再看看上面的build.xml配置文件,文件开头定义了3个属性,分别指定了源文件输出路径、类文件输出路径和生成的Jar文件名,后面对这些路径的引用都通过一个${property name}来引用。所以,要注意这样一个原则“目录的定义与目录的引用应该分开”。


build.xml文档编写:
[/color]
<?xml version="1.0"?>
<project default="dist" name="Project A">
    <description>
         一段描述信息,没有实际作用。
    </description>
    <!--property 元素相当于变量,存放一定的值,一旦给定以后不能改变,只能通过控制台命令行给初始值。
                 一般用 value 给其赋值,这里用 location 代替 value 是因为 location 属性专门设
                 计用于以平台无关的方式包含文件系统路径,也就是当前路径。-->
    <property name="srcDir" location="."/>
    <property name="buildDir" location="classes"/>
    <property name="distDir" location="dist"/>
    
    <!--一个target 元素就是一个任务,一个步骤,如果命令行没有指定开始任务,则由 project 元素的 default 属性决定要执行的任务-->
    <target name="init" description="在元素中指定描述信息!">
        <echo message="这里的信息将被输出到控制台!">
        <!--tstamp 元素一般不定义属性和内容,不产生任何输出;相反,它根据当前系统时间和日期设置 Ant 以下属性:
         属性                 说明                                     例子
         DSTAMP             设置为当前日期,默认格式为yyyymmdd         20031217
         TSTAMP             设置为当前时间,默认格式为hhmm             1603
         TODAY             设置为当前日期,带完整的月份             2003 年12 月17 日-->
        <tstamp/>
        <!--mkdir 元素用来创建目录 dir 属性用来指定目录路径-->
        <!--$ 引用 property 元素指定的 name 为 buildDir 的属性变量,这里为classes-->
        <mkdir dir="$"/>
        <mkdir dir="$"/>
        <!--文件操作:
             <copy file="src/Test.java" tofile="src/TestCopy.java"/> 把文件 Test.java 拷贝一份 TestCopy.java 
             <move file="src/Test.java" tofile="src/TestCopy.java"/> 把文件 Test.java 重新命名为 TestCopy.java
             <copy file="src/Test.java" todir="archive"/> 把文件 Test.java 从 src 目录复制一份到 archive 目录下
             <move file="src/Test.java" todir="archive"/> 把文件 Test.java 从 src 目录下移动到 archive 目录下
             <replace file="input.txt" token="old" value="new"/>replace 任务,它执行文件中的查找和替换操作。
             token 属性指定要查找的字符串,
             value 属性指定一个新的字符串,
             查找到的标记字符串的所有实例都被替换为这个新的字符串.
             替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为
             true。这将导致该任务输出找到和替换的标记字符串实例的数目。
             <copy todir="archive">---使用模式匹配复制多个文件
                 <fileset dir="src">--fileset 代替 file 属性
                     <include name="*.java"/>--包含 src 目录下所有的 *.java 文件
                     <exclude name="*.class"/>--不包含 src 目录下所有的 *.class 文件
                 </fileset>
             </copy>-->
    </target>

    <!--target 元素的 depends 属性用来设置多个 target 元素之间的依赖关系,如果要执行某个任务,必须先执行 depends 属性指定的所有
         它所依赖的 target 元素,只有它所依赖的所有 target 元素都执行完了才能执行它自己-->
    <target name="com" depends="init">
        <!--javac 元素把 srcdir 指定目录下所有 *.java 文件编译成 *.class 文件到 destdir 指定的目录下!
             如果不指定 destdir 属性,那么默认编译到同一目录下。其他属性:
              classpath:等价于javac 的-classpath 选项。
              debug="true":指示编译器应该带调试信息编译源文件。
              fork="true":当你希望指定编译器的某些内存选项,或者需要使用一种不同级别的编译器的时候。该属性设置为“true”
              executable="d:sdk141 injavac":指定一个不同的 javac 可执行文件。
              memoryMaximumSize="128m":向上边指定的 javac 传递一个最大内存设置-->
        <javac srcdir="$" destdir="$"/>
    </target>

    <target name="dist" depends="com">
        <!--jar 元素:在编译 Java 源文件之后,结果类文件通常被打包到一个 JAR 文件中,这个文件类似 zip 归档文
             件。每个 JAR 文件都包含一个清单文件,它可以指定该 JAR 文件的属性。
             还可以把目录下的所有内容打包为 WAR 文件
             destfile:打包后的文件全名
             basedir:要打包的文件路径-->
        <jar destfile="$/package-$.jar" basedir="$">
            <!--manifest 属性允许指定一个用作该 JAR 文件的清单的文件。清单文件的内容还可以使用 manifest
                 任务在生成文件中指定。这个任务能够像文件系统写入一个清单文件,或者能够实际嵌套在 jar 之
                 内,以便一次性地创建清单文件和 JAR 文件。-->
            <manifest>
                <attribute name="Built-By" value="$"/>
                <attribute name="Main-Class" value="package.Main"/>
            </manifest>
        </jar>
        <jar destfile="$/package-src-$.jar" basedir="$"/>
    </target>

    <target name="zip" depends="dist">
        <!--zip 元素用来创建 zip 包,和 jar 元素相似-->
        <zip destfile="output.zip" basedir="output"/>
        <!--相同的语法也可用于创建 tar 文件。 还可以使用 GZip 和 BZip 任务来压缩文件。-->
        <tar destfile="output.tar" basedir="output"/>
        <gzip src="output.tar" zipfile="output.tar.gz"/>
        <!--解压缩和提取文件同样也很简单.-->
        <unzip src="output.tar.gz" dest="extractDir"/>
        <!--还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相
             匹配的所有现有文件。相关的任务名称是 untar、unjar、gunzip 和 bunzip2。-->
    </target>

    <!--编写一个 clean目标来从目标目录移除生成的任何类文件是个很好的习惯。如果想要确
         保所有源文件都已编译,就可以使用这个任务。这种行为刻画了 Ant 的许多任务的特点:
         如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。-->

       <!--delete 元素用来删除目录 $ 引用 property 元素指定的 name 为 buildDir 的属性变量-->
    <target name="clean">
        <delete dir="$"/>
        <delete dir="$"/>
    </target>
</project>

引用:http://hi.baidu.com/239666661/blog/item/e7bb2b107f2cff04203f2e4a.html
分享到:
评论

相关推荐

    适应ant的build文档的编写

    build.xml定义了Ant要执行的批处理命令。虽然Ant也可以使用其它文件名,但是遵循标准能更使开发更规范,同时易于与别人交流。 通常,src存放Java源文件,classes存放编译后的class文件,lib存放编译和运行用到的所有...

    将项目打成war包

    特别简单 只需照着文档操作,就可实现。...再使用ant执行build.xml时必须在java的jre下的lib下的ext安装路径 把servlet-api.jar拷贝进去。 重新使用build.xml 命令打包即可.不然会出现javax.servlet.http 编译问题

    java Ant 教程

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

    ant1.9资源

    Ant的构件文件是基于XML编写的,默认名称为build.xml。为了更清楚的了解Ant,在这里编写一个简单的Ant程序,用来展现Ant的功能,让读者对Ant有一个初步的了解。首先在E盘下建立一个build.xml文件,内容如下: &lt;?xml...

    apache-ant-1.9.3-src.tar

    每个ant脚本(缺省叫build.xml)中设置了一系列任务(target):比如对于一个一般的项目可能需要有以下任务。 * 任务1:usage 打印本脚本的帮助信息(缺省) * 任务2:clean 清空初始化环境 * 任务3:javadoc &lt;-- ...

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

    7.3.2 配置文件build.xml 7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    7.3.2 配置文件build.xml 7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    7.3.2 配置文件build.xml 7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    7.3.2 配置文件build.xml 7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Maven是Ant的另一种选择么? 1.7. 比较Maven和Ant 1.8. 总结 2. 安装和运行Maven 2.1. 验证你的Java安装 2.2. 下载Maven 2.3. 安装Maven 2.3.1. 在Mac OSX上安装Maven 2.3.2. 在Microsoft Windows上安装...

    Ant 1.9.2 API (CHM格式)

    Ant功能强大的地方在于,程序员不仅能通过编写Ant的脚本(build.xml)来进行各种文件部署管理操作,还可以通过调用Ant的丰富的API,甚至扩展Ant的API进行编程。 1. 目录操作: 1) 创建目录 1. Project prj=new ...

    uiautomator:uiautomator 演示

    编写测试案例(本demo中是test.java)3、先创建编译文件build.xml,使用命令android create uitest-project -n -t -p 4、定位到项目目录,执行ant build;即通过build.xml将uiautomatorDemo打包成jar5、通过adb导入...

    Maven2 的新特性.7z

    • Maven1:project.xml、maven.xml、project.properties和build.properties。 • Maven2:pom.xml和settings.xml。 POM是Maven的核心对象模型,在Maven2中POM已由project.xml转移到pom.xml中使用,版本也由3升级...

    jocky 混肴编译rar包(ant和插件俩个版本)

    事实上,在Eclipse中使用Jocky时,Jocky也是首先针对所选工程生成Ant的Build文件(默认名称jocky_build.xml),然后再通过Ant完成混淆编译。 以下是Jocky在Eclipse中自动生成的Ant Build 文件示例: 1 ...

    beanvalidation-spec:Bean验证规范

    建筑文档该规范以AsciiDoc格式编写。 为了将其转换为呈现效果良好的输出,您需要在系统上安装Apache Ant,并在其类路径中使用它。 构建文件build.xml位于此目录中,所有命令都相对于此目录。 运行ant all.doc会在...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject...

    java笔试题算法-segmentation:Java中的图像分割框架(itba.edu.ar上的计算机图形项目)

    build.xml : Apache Ant 构建文件 COPYING :GNU 通用公共许可证 doc :文档 img :要测试的示例图像 README.markdown : 这个 README 文件 resources :包含 GUI 使用的图标 src : 源代码,完全用 Java 编写 程序...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    BlazeDS 将读取 services-config.xml 配置文件,该配置文件又引用了 remoting-config.xml、proxy-config.xml 和 messaging-config.xml 这 3 个配置文件,所以,一共需要 4 个配置文件。 由于 BlazeDS 需要将 Java ...

    java 混淆工具,不可逆 jocky 也许是最好的了

    事实上,在Eclipse中使用Jocky时,Jocky也是首先针对所选工程生成Ant的Build文件(默认名称jocky_build.xml),然后再通过Ant完成混淆编译。 以下是Jocky在Eclipse中自动生成的Ant Build 文件示例: ...

    dbflute-document:DBFlute的文档,例如公共网站HTML

    由Apache Ant执行'script / build-document.xml'的'html'任务 提交并推送“ dbflute-www”修改,并在Seasar管理站点中发布 #hope jflute将从Apache Ant迁移到其他版本(2019/01/02) #hope jflute将从'dbflute-www'...

Global site tag (gtag.js) - Google Analytics