`
frank-liu
  • 浏览: 1691756 次
  • 性别: 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格式的构建...

    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下载 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 ...

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

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

    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.7.1-src.zip_Apache Ant1.7_ant 1.7.1_ant1_apache ant

    Use the links below to download a source distribution of Ant from one of our mirrors. It is good practice to verify the integrity of the distribution files, especially if you are using one of our ...

    ANT文件详解 ant介绍 ANT 命令

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

    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系列的版本,这是该工具的一个重要里程碑,提供了许多增强的功能和修复了已知...

    apache-ant-1.10.1-ant编译环境

    ant配置后提示不是内部命令也不是外部命令解决办法: 1、解压缩包。例如解压到E:\学习类\apache-ant-1.8.2, 2、配置环境变量。在系统环境变量中新建一个ANT_HOME 的变量,值为D:\apache-ant-1.10.1。在path 变量中...

    ant脚本资料ant

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

    Axure AntDesign元件库

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

    ant工具和ant教程

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

    ant_1.2.6 ant_1.2.6.zip

    Ant是Apache软件基金会的一个开放源代码项目,是一个Java构建工具,它使得构建、部署和管理Java项目变得更加简单。Ant以其XML格式的构建文件而闻名,这些文件定义了构建过程中的任务序列,允许开发者以声明性的方式...

    apache-ant-1.9.16-bin.zip

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

Global site tag (gtag.js) - Google Analytics