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

ant杂事整理

 
阅读更多

ant简单介绍

      我们在平常的java开发过程中间,经常会处理一些这样的小任务,比如编译代码,运行测试代码,代码打包等。最常见的一些问题就是,如果用手工命令行来处理的话,需要敲很长的命令行,要在命令行里面指定各种参数。这样就很麻烦。如果用IDE来做呢,确实显得方便一点,可是不同的人拿到代码,用IDE打开,然后要来处理这些任务的时候,经常也需要配置classpath之类的各种路径。还是不够方便。总之,用命令行太啰嗦,用IDE则不够通用。还有,在某些特殊情况下,如果我们没有IDE,那该怎么办呢?别着急,我向您推荐自动化构建工具ant.

    实际上我前面提到的问题基本上在编译型语言中都会面临。不同的平台已经有了对应的工具了,比如c语言平台的make, java平台的ant, maven.还有.net平台的msbuild。对于ant来说,我们基本上只需要写一个指示各种任务的配置文件,然后就可以重复的多次运行了。比如说,我们想要编译代码的时候,只要用一个ant build之类的命令就搞定了,不需要敲一堆的命令。

常用的概念和任务列表

    ant本身的配置文件是一个xml文本。ant命令会默认的去查找当前目录的build.xml文件,如果写的配置文件不是默认命名为build.xml,就需要在命令里手工指定这个文件。基本上配置文件里面的结构如下:

一个build文件只是描述如何来构造一个project

    如下所示,在文件的声明部分,会有一个project的xml节点,它是最外层的声明。

 

<project name="structured" default="archive">
<description>Compile and runs a simple program</description>

</project>

 在这个大的结构里面,可以针对该构建的项目进行下一步的任务细节划分。

一个project中间包含有多个target

    这里每一个target对应着一个我们期望要完成的任务,比如说编译,运行代码或者测试等等。target的典型示例如下:

 

<target name="init">
        <mkdir dir="build/classes" />
        <mkdir dir="dist" />
    </target>
    
    <target name="compile" depends="init"
        description="Compiles the source code">
        <javac srcdir="src" 
            destdir="build/classes" />
    </target>
 

这里我们添加了两个target,一个是初始化构建过程的任务,主要就是创建两个目录。另外一个就是编译代码。通过在target里面配置和指定各种参数,我们就可以通过ant命令来执行这些target了。这里比较有意思的一点就是target之间会有一定的依赖关系。比如说,我们要运行代码的时候,起码代码要先编译了吧。那么我们就需要在运行的target上面指定depends的target,这样当要执行该target的时候,他所依赖的target会先执行。关于target之间的依赖,最典型的问题就是不要形成循环依赖,否则没法知道该先执行哪个后执行哪个。鬼打墙的道理,你懂的。

一个target可以包含有多个task

    因为要执行一个target可能需要多个步骤,比如前面的init target,就通过两个mkdir task来创建两个目录。所以说一个具体的task就是一个具体的执行小步骤。包括执行一个javac的编译命令或者jar打包命令。

 

    在实际的脚本中,我们还需要设置一些property来配置各种路径信息。总的来说,ant里面基本的概念就这么些几个,想想实在很简单。

一个简单的模版

    现在,假设我们要做一个项目,然后用ant来管理构建的话,需要做哪些事呢?基本上来说需要从两个角度来考虑。一个就是整体项目结构布局,另外就是项目常用的任务。简单来说,需要有一下几个部分:

代码编译

    我们的代码里面含有产品代码和测试代码,为了不让他们混淆在一起,我们需要做几个事。首先,让这两个部分的代码位于不同的目录里。另外,编译之后的代码最好不希望和源代码混在一起。常用的情况下,我们会把代码划分成两个部分:

main和test两个目录。编译后的代码可以考虑放在一个单独的bin目录中,里面包含有class-main, class-test两个目录,分别表示编译后的产品代码和测试代码。

类库引用

    同样处于分离产品和测试的考虑,我们将产品代码需要引用的类库和测试需要的类库进行分离,我们将需要的类库放在名字为lib的目录里。里面分别放了lib-main和lib-test两个目录。

这样,整体来说,代码和类库这几个基本的目录结构就定下来了,目录引用图如下:

目录结构

清除编译结果

    还有一个比较常用的就是要清理编译后生成的class文件以及一些生成的测试统计结果文件。这个时候就需要设定一个clean的target,它的目的无非就是找到这些文件目录,然后删掉他们。

 

总的来说,只要设置好这样的目录结构并计划要执行哪些target,然后就可以来写build脚本了。一般来说除了这几个编译产品和测试代码的常用任务,还可能会包含一些其他的任务。下面是我整理的一个示例脚本:完整的示例和代码可以见附件。

 

<project name="SampleProject" default="compile">

    <path id="classpath.main">
        <fileset dir="lib/lib-main" includes="**/*.jar" />
    </path>

    <path id="classpath.test">
        <path refid="classpath.main" />
        <pathelement location="bin/classes-main" />
        <fileset dir="lib/lib-test" includes="**/*.jar" />
    </path>

    <property name="junit.data" value="reports/junit/data" />
    <property name="junit.html" value="reports/junit/html" />

    <target name="clean">
        <delete failonerror="false" includeemptydirs="yes">
            <fileset dir="bin" includes="classes-*/**" />
        </delete>
    </target>

    <target name="compile">
        <mkdir dir="bin/classes-main" />
        <javac srcdir="src/main" destdir="bin/classes-main"
            debug="on" classpathref="classpath.main" />
        <mkdir dir="bin/classes-test" />
        <javac srcdir="src/test" destdir="bin/classes-test"
            debug="on" classpathref="classpath.test"/>
    </target>

    <target name="test" depends="-test-run, -test-report" />
   
    <target name="-test-run" depends="compile">
        <mkdir dir="${junit.data}" />
        <junit printsummary="yes" fork="true" haltonfailure="no">
            <classpath>
                <path refid="classpath.test" />
                <pathelement location="bin/classes-test" />
            </classpath>
            <formatter type="xml" />
            <batchtest haltonfailure="no"
                todir="${junit.data}">
                <fileset dir="src/test" includes="**/Test*.java" />
            </batchtest>
        </junit>
    </target>

    <target name="-test-report" depends="-test-run">
        <mkdir dir="${junit.html}" />
        <junitreport todir="${junit.data}">
            <fileset dir="${junit.data}" includes="TEST-*.xml"/>
            <report format="frames" todir="${junit.html}" />
        </junitreport>
    </target>

</project>
 

这个示例中包含了编译代码,指定编译结果目录,然后执行测试,生成测试统计结果等任务。可以说,只要把这些任务和相关的依赖关系列出来,后面就相当于在每个任务里填空。

总结和引申

    ant是一个简单易懂的构建管理工具。实际上大多数的项目构建过程都比较接近,如果能够从中间整理一个常用的模版,以后根据自己的需要稍微修改一下就可以运行,这样可以省下很多的精力。前面给的示例还有一些小的需要改进的地方,比如说clean的时候,有些测试统计的结果如果也需要清理的话,就需要修改。另外,其中也没有添加将编译后的文件打包的功能。在有的项目,还可以利用ant进行项目自动化部署的工作。

参考材料

ant in action

Test driven PRACTICAL TDD AND ACCEPTANCE TDD FOR JAVA DEVELOPERS

 

  • 大小: 41.6 KB
分享到:
评论

相关推荐

    ant资料整理含demo

    apache-ant-1.9.2-bin.zip Ant帮助文档.docx 有文档结构视图,方便查阅 Ant 下载、安装、使用、教程全面了解 - edward0830ly的专栏 - 博客频道 - CSDN.NET.html 3个demo:build.xml自己随便写的,build-wsimport-...

    ant ant ant ant

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

    ant ant下载与配置

    ant ant下载 ant配置ant ant下载 ant配置ant ant下载 ant配置

    apache-ant-1.6.5-bin.zip_ ant 1.6.5_ant_ant-1.6.5_apache ant win

    Apache Ant 是一个开源的构建工具,广泛用于Java项目构建,由Apache软件基金会开发。这个"apache-ant-1.6.5-bin.zip"文件是Ant的1.6.5版本的二进制发行版,适合在Windows操作系统上使用。Ant是基于Java的,它的主要...

    开发工具 ant-1.9.6

    开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6开发工具 ant-1.9.6...

    ant.jar下载

    org.apache.tools.ant.Main org.apache.tools.ant.Task org.apache.tools.bzip2.CRC org.apache.tools.ant.Target org.apache.tools.ant.Project org.apache.tools.zip.ZipFile org.apache.tools.zip.ZipLong ...

    apache-ant-1.7.1-bin.zip_Ant 1.7_Apache-Ant 1.7.1_ant1.7_apache

    December 19, 2006 - Ant 1.7.0 Available Apache Ant 1.7.0 is now available for download. Ant 1.7 introduces a resource framework. Some of the core ant tasks such as &lt;copy/&gt; are now able to ...

    apache-ant-1.6.0-bin.zip_ant 1_ant 1.6_ant 1.6.0_ant-1.6.0_apach

    标签中的"ant_1", "ant_1.6", "ant_1.6.0", "ant-1.6.0"和"apache-ant-1.6"都指的是Apache Ant的不同版本,1.6.0是其中的一个稳定版本,发布于2003年,提供了许多改进和新特性,比如支持JUnit 3.8,对ivy依赖管理...

    ANT文件详解 ant介绍 ANT 命令

    ### ANT文件详解:深入理解ANT及其在项目构建中的应用 #### Ant的概念与起源 Ant,全称为Apache Ant,是一款开源的、跨平台的项目构建工具,最初由James Duncan Davidson开发,现归属于Apache软件基金会Jakarta...

    ant.jar,ant-junit.jar,ant-launcher.jar,ant-trax.jar

    在IT行业中,Ant是一个至关重要的自动化构建工具,尤其在Java开发领域中被广泛使用。Ant以其XML为基础的构建文件(通常命名为build.xml)为特点,允许开发者定义和执行项目的构建任务。现在,让我们深入探讨一下标题...

    ant工具ant资源包

    Apache Ant 是一个由Java编写的构建工具,它主要用于自动化软件项目的构建、编译、测试和部署过程。这个“ant工具ant资源包”很可能是Apache Ant的一个版本,具体为1.8.3。Ant以XML为基础来描述项目构建的规则和依赖...

    ant1.9包下载

    Apache Ant是Java开发中不可或缺的构建工具,它以其灵活性、可扩展性和跨平台特性而闻名。标题中的"ant1.9包下载"指的是Apache Ant 1.9系列的版本,这是该工具的一个重要里程碑,提供了许多增强的功能和修复了已知...

    Axure AntDesign元件库

    Axure AntDesign元件库是一款专为Axure设计的高质量组件集合,它旨在帮助原型设计师快速构建基于AntDesign设计系统的Web应用界面。AntDesign是阿里巴巴开源的一款著名前端UI框架,以其优雅、直观、高效的特性广受...

    ant脚本资料ant

    Ant是Apache软件基金会下的一个项目,它是一款强大的构建工具,主要用在Java环境中,用于自动化构建、测试和部署Java应用程序。Ant使用XML来描述构建过程和依赖关系,使得构建过程可配置且易于跨平台移植。 1. **...

    ant工具和ant教程

    Ant是Apache软件基金会下的一个Java项目,它是一个构建工具,主要用于管理Java项目的构建过程。Ant以其XML为基础的构建文件(build.xml)而著名,这些文件详细描述了如何编译、打包和测试Java应用程序。Ant的核心...

    apache-ant-1.9.16-bin.zip

    Apache Ant 是一个开源的构建工具,广泛用于Java项目管理,它是Apache软件基金会的产品之一。Ant以其XML为基础的构建文件(build.xml)而著名,这种文件定义了构建过程中的任务序列,使得开发人员能够自动化编译、...

    Ant 资源 Ant 资源

    ### 关于Ant构建工具 #### 一、Ant简介 **Ant**是一款开源的Java构建工具,主要用于自动化构建过程,如编译、测试、部署等。它最初由James Duncan Davidson开发,现归属于Apache软件基金会。 ##### 1.1 什么是Ant...

    Ant全攻略 教会你如何玩转Ant

    Ant全攻略:掌握Java构建工具Ant Ant是一种基于Java和XML的构建工具,由Apache软件基金会开发,用于自动化Java项目的构建过程,包括编译、测试、打包和部署等任务。它以其灵活性和可扩展性著称,通过XML格式的配置...

    Ant工具的使用及Ant介绍

    1,什么是ant ant是构建工具 2,什么是构建 概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个 3,ant的好处 跨平台 --因为ant是使用java实现...

Global site tag (gtag.js) - Google Analytics