文档章节

ANT十年手记分享——深入浅出 ANT(1)

极乐君
 极乐君
发布于 2016/11/19 16:51
字数 2919
阅读 116
收藏 1
  • 前言
  • Ant简介
    • Ant是什么
    • Ant 的由来
    • 使用Ant所带来的好处
    • 如何学习Ant
  • Ant起步
    • Ant 环境安装及配置
    • 第一个Ant构建脚本
    • 元素介绍
    • 执行第一个任务
    • Ant的依赖文件
  • 小结

 

  • 一、前言

这些天,朋友鼓动我在极乐科技的平台上发点原创的干货,我思来想去发点什么呢?最后决定把这套自己整理的Ant学习手册公布出来,我尽可能以简单易懂的方式阐述给大家,别无他求,但求凭借微薄之力帮助大家节省些许学习时间。

其实这套学习手册写于十年前,当时的我还在用C语言写银行系统,实在是受不了make构建工具的各种烦人错误,于是抽出业余时间自学了Ant。现在有关Ant资料网上已经有很多了,但是系统性的文档仍然非常稀缺,可想而知,十年前网络上几乎找不到多少关于Ant的参考资料,那时的我完全靠的是一腔热情,一个元素一个元素,一个属性一个属性的边试边学。绝不放过任何一个知识点,绝不因为任何一个困难而妥协,最后反而学的比较扎实。这次分享这套学习手册,希望让大家更多的了解Ant、使用Ant构建你的项目。

好吧,让我们一起进入Ant的世界!

  • 二、Ant简介 

2.1 Ant是什么

从理论上讲,Apache Ant是一种基于Java的,将软件工程的编译、测试、部署等步骤联系在一起并加以自动化的构建(build)工具。它与make工具有几分相似,但又没有make工具所具有的缺陷。这段话摘录于Ant的英文使用手册,是Apache自己对Ant的概括。

Ant的创始人 James Duncan Davidson 实际为这个工具启的名字应该是another neat tool(另一个整洁的工具),ANT实际是各个单词首字母的缩写,并不是真正意义上的蚂蚁。

不过,随着你深入的学习和使用Ant构建工具,你会慢慢感觉到这样一个小巧的软件可以为我们解决很多非常庞杂的工作,相信到时候你会更喜欢将它叫做勤劳的蚂蚁。

2.2 Ant 的由来

如果你有过在Linux、Unix等操作系统中编写C或C++程序的经历,那么你一定不会对make工具感到陌生,在那种环境下我们必须在可读性较差的makefile文件中配置对构建的描述。其中作者最讨厌的事莫过于makefile文件中的tab与空格的问题,有时仅仅只是makefile作了小小的修改,也好像得了强迫症一样,必须检查一遍修改的信息之前有没有空格符号以免影响后面的运行。如果不注意检查,有时候错误信息真的让作者不知所云。当然,像这样烦人的问题还有很多,这就不一一列举了。

您有可能会说,我们可以使用其他的现有工具,如:gnumake、nmake、jam等等,大可不必为这些小事来大动干戈的开发一个新的构建工具。当然其中有一些工具避免了一些问题,但是又面临可读性差,扩展性不好,帮助文档不全,学习难度大,跨平台问题等等。

Ant的开发者曾经在多种(硬件)平台上进行软件开发,他正是因为无法忍受这些工具的限制和不便,进而产生了编写一个新的、简洁易用的构建工具——Ant。

2.3 使用Ant所带来的好处

有些对make等构建工具比较熟悉,并且刚刚开始使用Ant的读者会觉得Ant与make等构建工具没有什么两样,Ant对构建工具的描述make也具备,而且Ant在描述构建时会失去一些shell特有的表达能力,如:`find . -name foo -exec rm {}`。那么,既然我们已经有了make以及其他的构建工具为什么还需要开发一种新的构建工具呢?正如我们在Ant的由来中提到的,Ant有其先天优势。

的确。从理论上讲,Ant就有些类似于make工具,也要定义各个生成文件之间的依赖关系。然而,使用过make工具的读者都知道,make工具是基于平台(OS)的,在不同的平台上会有很大的局限性。

Ant跟make之间最主要的不同点在于Ant是将那些任务作为Java类来实现的,Ant极大的继承了Java平台的独立性。这就表示Ant构建文件可以很容易的从一个平台转移到另一个平台,只要该平台支持Java虚拟机,只要维护一个构建描述就可以在不同的平台上执行。

其次,Ant配置文件是以xml格式书写,良好的书写风格大大提高了配置文件的可读性。虽然Ant在描述构建时会失去一些shell特有的表达能力,但Ant有一个<exec> task,这个task允许执行特定OS上的命令。

再次,Ant 的真正力量在于它的易于扩展性。事实上,恰恰正是这种可扩展性促使人们开发了如此多的附加任务。

最后,随着我们开发的应用程序的生成过程变得越来越复杂,Ant能够确保在每次生成期间都使用精确相同的生成步骤,同时实现自动化,产生一致的生成版本。

以上所举的种种好处再加上当前已经有相当多的优秀的IDE开发工具对Ant提供了支持,使得编写Ant文件的工作变得更加轻松,很好的避免了其他构建工具所具有的缺陷。正是由于Ant的其灵活性和易用性,很快Ant率先在 Java开发人员中流行开来。

Ant没有定义自己的语法,有的只是一组Ant自己能够理解的xml元素,但作者个人认为, 这并不影响它成为一款划时代的工具。

2.4 如何学习Ant

学习Ant之前,首先要明确的一个问题是:我们要用Ant做什么?然后针对这个问题来有的放矢的进行学习。

Ant也是按照插件式结构设计的,因此,每天都可能会有很多新的功能加入。我们不可能在很短的时间内将所有的Ant相关知识全部学完,也不可能等到将所有的Ant知识学习通透了再去工作。只有在工作中去学习,带着问题去学,才会有真正意义上的进步。在Ant中,哪个部分是自己马上要用到的,就先学习那个部分,其他部分等需要用到时在去查资料也不迟。

  • Ant起步

3.1 Ant 环境安装及配置

下载Ant安装包

首先,我们可以到Ant官网 http://ant.apache.org/ 下载安装包、源代码、使用手册等资源。如下图:

点选 Binary Distributions 进入安装包下载页面,下载最新的Ant安装包。Ant的安装包分为三种格式: apache-ant-1.9.7-bin.zip、 apache-ant-1.9.7-bin.tar.gz、apache-ant-1.9.7-bin.tar.bz2。其中第一种适用于windows系统、后两种都是用Unix、Linux系统。这里作者选择下载apache-ant-1.9.7-bin.zip。如下图:

安装Ant

将下载安装包解压到指定的目录下(笔者解压的路径为:D:\Ant),并在系统环境变量中添加ANT_HOME,并将地址指向Ant解压的根目录。

在PATH环境变量中增加Ant的bin目录地址。如:%ANT_HOME%\bin;

打开cmd(命令行)窗口,输入ant并回车,如果打印出build.xml不存在,则表示Ant安装成功,只是build文件未指定。如下图:

3.2 第一个Ant构建脚本

在任意目录下创建我们的第一个build.xml构建脚本文件(笔者的文件地址为:D:\tmp\build.xml),并输入以下内容:

<?xml version="1.0" encoding="GB2312"?>
<project name="demo">
</project>

打开cmd(命令行)窗口,进入构建脚本所在目录(如:D:\tmp),输入ant并回车,如果打印出:构建成功和执行时间。恭喜,这表示我们的第一个构建脚本执行正常。如下图:

由于我们还没有仅仅只是创建了一个空的构建脚本,所以还得不能实现有意思的功能,后面我们会一步步深入。

3.3 元素介绍

根元素<project>

project是构建脚本的根元素,所以一个构建脚本文件中必须包含且仅能包含一个project标签,<project>和</project>之间所包含的所有内容组成了一个完整的构建文件。

以下是project元素的属性列表:

3.4 执行第一个任务

准备执行我们的第一个任务,那么这第一个任务执行点啥呢?还是执行经典的"hello world! "吧!

打开我们的构建脚本文件,并增加第一个任务元素,名为:say hello。并通过echo元素打印出:hello world!

找到根元素,并添加default属性,属性值为:say hello,使Ant默认执行say hello任务。代码如下:

<?xml version="1.0" encoding="GB2312"?>
<project name="demo" default="say hello">
	  <target name="say hello" description="你好,世界!">
	  	  <echo level="info" message="hello world!"/>
	  </target>
</project>

打开cmd(命令行)窗口,进入构建脚本所在目录(如:D:\tmp),输入ant并回车,如果打印出:“hello world!”。恭喜,这表示我们的第一个任务执行成功。如下图:

3.5 Ant的依赖文件

这里为下一篇文章埋个引子,下篇文章就我会为大家介绍一下构建脚本需要依赖的各种文件,这里只是做一个基本介绍。build.xml的正常运行依赖于以下文件

1. build.properties

定义一些全局设置属性。

2. properties.xml

用于定义build.xml所需的属性值,主要完成通过build.properties定义构建工具需要变量集合、Classpath属性等工作。

3. app-settings.xml

用于定义设置应用程序状态的一些属性。

  • 小结

今天只是我系列文章的开篇,文章的结构和内容还有很多值得改进的地方,欢迎大家提出宝贵的建议和意见。

好吧!让我们下期再见!谢谢!

——————————————————————————————————————————

极乐科技专栏原创作者征集进行时……

  • 如果你乐于分享、愿意交流、爱钻研技术;
  • 如果你希望记录成长的过程,期待与大牛比肩;
  • 如果你希望得到更多的关注……

欢迎加入我们原创作者团队,我们原创作者团队有大牛,有妹纸,有逗比!

我们的原创作者团队能交流,善协作,爱学习!

加入原创作者团队,结实更多的它他她!

此外,对于优质原创内容,极乐科技会有相关激励!让劳有所得!

© 著作权归作者所有

共有 人打赏支持
极乐君
粉丝 15
博文 6
码字总数 8929
作品 0
武汉
私信 提问
《编写可维护的 JavaScript》读书笔记第14章:Ant

安装 运行 Ant 需要 Java 环境。 Windows 下的安装过程非常简单: 下载 Ant 压缩包 解压缩到某个目录 配置环境变量,将 {Ant 安装目录}bin 路径存在 PATH 中,用分号与其他路径隔开 进入 CM...

张前程
2014/01/05
0
0
Gradle学习(十七)——Ant操作

转载请注明:http://blog.csdn.net/lastsweetop/article/details/79043654 简介 Gradle提供了与Ant的完美集成,你可以在Gradle构建中使用单个Ant任务或者全部由Ant构建。在Gradle的构建脚本里...

lastsweetop
2018/01/12
0
0
mac下android工程打包时的ant安装

一、Ant含义 Ant本身就是一种流程脚本引擎,用于自动化调用程序完成项目的编译、打包、测试等。ANT是纯JAVA语言编写的,所以具有很好的跨平台性。Ant运行是只需要一个XML文件(构建文件),所...

今日竹石
2014/12/11
0
0
Hive2.1.1 下hwi web界面的配置(超详细)

2016/11/1 17:30:06 资料: 1.ant 1.9.7 2.Hive src; 3.jdk 1.7; 步骤: A: Hive2.1.1源码下载地址: http://apache.fayea.com/hive/hive-2.1.1/ 1.打war包 tar -zxvf hive-2.1.1-src.tar.g......

bymain
2016/12/17
0
0
【jenkins参数化构建】将Ant Targets参数化

使用jenkins做持续集成时,Ant Targets经常变动,所以采用参数化构建,将Ant Targets参数化 1、在jenkins的job中增加String Parameter/Persistent String Parameter 2、在构建时选择batch/s...

donhui
2015/01/04
0
1

没有更多内容

加载失败,请刷新页面

加载更多

百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
43分钟前
2
0
扒站wget仿站

wget -c -r -p -np -k http://xxx.com/xxx 其中: -c, --continue (断点续传) 接着下载没下载完的文件 -r, --recursive(递归) specify recursive download.(指定递归下载) -p, --page...

临江仙卜算子
45分钟前
2
0
Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
3
0
如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
4
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部