admin管理员组

文章数量:1559112

0 前言

全是干货的技术殿堂

文章收录在我的 github 仓库,欢迎star/fork:
java-interview-tutorial
https://github/wasabi1234/java-interview-tutorial

apache ant 是由 java 语言开发的工具,由 apache 软件基金会所提供。apache ant 的配置文件写成 xml 容易维护和书写,而且结构很清晰。

1 简介

ant 是一个 apache 基金会下的跨平台的基于 java 语言开发的构件工具。在我们详细了解 apache ant 之前, 让我们来讲解为什么构建工具是需要最先了解的。

构建工具的需求

一般情况,开发人员花费大量的时间做一般性的任务,比如:构建和部署,通常包含下面的工作:

编译代码
封装二进制文件
在测试服务器上部署二进制文件
测试改变
从一个地点拷贝代码到另一个地点
为了自动和简化上面的工作,apache ant 是非常有用的。这是一个基于开放的操作系统构建和部署的工具,该工具需要从命令行执行。

apache ant 的历史

ant 是由 james duncan davidson 开发的(也就是 tomcat 最初的开发者)。
最初是用来构建 tomcat,被作为一个 tomcat 的发行版的一部分。
apach make 工具包的复杂性与诸多问题催生了 apache ant。
在 2000 年的时候,ant 被作为一个独立的项目。最新的 apache ant 版本是 2014 年 5 月的 1.9.4 版本。

apache ant 的特点

ant 是最完整的基于 java 语言开发的构建和部署工具。
ant 具有平台无关性,可以处理平台特有的属性,诸如文件分隔符。
ant 还可以用来执行平台特有的任务,比如使用 touch 命令修改一个文件的修改时间。
ant 脚本是用 xml 来完成的。如果你已经对 xml 有所了解,那么你学习 ant,将会比较得心应手。
ant 擅长自动完成重复任务。
ant 开始需要一系列的预先定义好的任务。
ant 提供了开发自定义任务的接口。
ant 可以很容易从命令行调用,并且它能够很好地集成免费和商用的集成开发环境。

2 下载与安装

2.1 homebrew

打开mac上的终端,并输入下面的命令,然后回车:

brew install ant

就装好ant了。

2.2 九游会真人第一品牌官网下载配置

让配置生效

source ~/.bash_profile

验证配置成功

  • ant -version

3 构建文件

一般来说,ant 的构建文件默认为 build.xml,放在项目顶层目录中。然而,并没有限制构建文件必须命名为 bulid.xml,也并不限制放在项目顶层目录中。你可以将构建文件命名为其他名字,也可以将它放在项目的其他地方。

这个教程将以简单的方式向你展示如何利用 apache ant 来自动地构建和部署项目的过程。在完成本教程的学习以后,你将会发现你已经具备下一阶段学习 apache ant 中等水平的专业知识 。

对于下面的练习,创建一个文件命名为 build.xml 的文件,存储在你电脑的任意地方 ,并包含一下的内容:


   <project name="hello world project" default="info">
   <target name="info">
      <echo>hello world - welcome to apache ant!echo>
   target>
project>

注意到上面的练习中,在 xml 文件的声明前面没有任何空行或者空格。如果你在写 xml 文件的声明时加入了空行或者空格,执行 ant -build 操作时,将会出现下面的错误信息:

the processing instruction target matching “[xx][mm][ll]” is not allowed.
错误信息的意思是:处理指令目标匹配 “[xx][mm][ll]” 不被允许。所有的构建文件需要包含项目元素 (project 标签) 和至少一个目标元素 (target 标签)。

构建文件的项目元素 有 3 个属性:

目标和目标之间可以有依赖关系。举个例子,一个部署 (deploy) 目标可能依赖于封装 (package) 目标,而这个封装目标可能又依赖于编译 (compile) 目标等。依赖关系被表示成依赖属性 (depends)。例如:

<target name="deploy" depends="package">
  ....
target>
<target name="package" depends="clean,compile">
  ....
target>
<target name="clean" >
  ....
target>
<target name="compile" >
  ....
target>

构建文件的目标元素有以下属性:


在上面的例子中 echo 任务主要负责打印消息。在我们的例子中,执行 echo 任务后,打印出 “hello world” 消息。

为了运行 ant 的构建文件,打开命令提示符并导航到 build.xml 建立的文件夹。输入 ant info 命令或者 ant 命令。这两种命令都可以运行,因为 info 是构建文件的默认目标。你讲会看到下面的输出信息:

c:>ant
buildfile: c:\build.xml

info: [echo] hello world - welcome to apache ant!

build successful
total time: 0 seconds

c:>

4 构建项目

现在我们已经学习了 ant 的数据类型,是时候在实际过程中运用所学知识了。在这一章节中,我们将会构建一个项目。这一章节的目的是创建一个 ant build 文件,该文件能够编译 java 源文件和将这些类文件存储在 web-inf\classes 文件夹下。

考虑接下来构建项目的结构:

数据脚本存储在 db 文件夹中。
java 源文件存储在 src 文件夹中。
images (图像),js (javascript 脚本),style (css 层叠样式表)存储在 war 文件夹中。
jsps 文件存储在 jsp 文件夹中。
第三方的 jar 文件存储在 lib 文件夹中。
java 类文件存储在 web-inf\classes 文件夹中。
学习完本教程的剩余部分后,就能知道这个项目是一个 hello world 传真应用。

c:\work\faxwebapplication>tree
folder path listing
volume serial number is 00740061 ec1c:adb1
c:.
 ---db
 ---src
.   ---faxapp
.   ---dao
.   ---entity
.   ---util
.   ---web
 ---war
    ---images
    ---js
    ---meta-inf
    ---styles
    ---web-inf
       ---classes
       ---jsp
       ---lib

下面给出上述项目的 build.xml 文件的内容。让我们来一条语句接一条语句地来分析它。


<project name="fax" basedir="." default="build">
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="build.dir" value="${web.dir}/web-inf/classes"/>
   <property name="name" value="fax"/>
   <path id="master-classpath">
      <fileset dir="${web.dir}/web-inf/lib">
         <include name="*.jar"/>
      fileset>
      <pathelement path="${build.dir}"/>
   path>
   <target name="build" description="compile source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" target="1.5">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      javac>
   target>
   <target name="clean" description="clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         fileset>
      delete>
   target>
project>

首先,让我们来声明一些源文件,web 文件和构建文件的一些属性信息。

在上面的例子中:

src.dir 表示这个项目的源文件目录,也就是存储 java 文件的地方。
web.dir 表示这个项目的 web 文件目录,也就是存储 jsps 文件,web.xml,css,javascript 以及其它与 web 相关的文件的地方。
build.dir 表示该项目的输出文件。
属性也可以引用其它属性。在上面的例子中,build.dir 属性引用了 web.dir 属性。

在上面的例子中,src.dir 就是项目源文件存放的地方。

我们项目的默认目标是编译目标。但是首先让我们来看一下 clean 目标。

clean 目标,就像它的名字所表明的意思一样,删除构建文件夹中的所有文件。

<target name="clean" description="clean output directories">
   <delete>
      <fileset dir="${build.dir}">
         <include name="**/*.class"/>
      fileset>
   delete>
target>

控制类路径 (master-classpath) 保存类路径的相关信息。在这种情况下,它包含了构建文件夹和 jar 文件夹中的所有的类文件。

<path id="master-classpath">
   <fileset dir="${web.dir}/web-inf/lib">
      <include name="*.jar"/>
   fileset>
   <pathelement path="${build.dir}"/>
path>

最后,构建目标构建这些文件。首先,我们创建一个构建目录,如果该目录不存在,我们就执行 javac 命令(具体以 jdk 1.5 作为我们目标的编译环境)。 我们对 javac 任务提供源文件夹和类路径,并且通过执行 javac 任务将类文件存放在构建文件夹中。

<target name="build" description="compile main source tree java files">
   <mkdir dir="${build.dir}"/>
   <javac destdir="${build.dir}" source="1.5" target="1.5" debug="true"
      deprecation="false" optimize="false" failonerror="true">
      <src path="${src.dir}"/>
      <classpath refid="master-classpath"/>
   javac>
target>

在这个文件上执行 ant,编译 java 源文件,并将编译后的类文件存放在构建文件夹的地方。

运行 ant 文件后,能看到以下输出:

c:>ant
buildfile: c:\build.xml

build successful
total time: 6.3 seconds
文件被编译后,将存储在 build.dir 文件夹中。

避坑

  • 注意这里设置了 jdk 的版本,注意和代码版本的对齐!

本文标签: