ANT详解及运行小例子

1.ANT介绍

1.1 什么是Ant?

Apache Ant 是一个将软件编译、测试、部署等步骤联系在一起加以优化的一个构建工具,常用于Java 环境中的软件开发。

Ant 的默认配置文件是build.xml。

1.2 什么是构建?

形象的说,构建就是把代码从某个地方拿来、编译、再拷贝到某个地方去等操作,当然不仅于此,但是主要用来干这个。

1.3Ant 的优势?

(1)跨平台:因为 ant 是使用 java 实现的,所以跨平台;

(2)使用简单:比其他构建工具简单,特别是和 ant 的兄弟 make 做比较;

(3)语法清晰:同样是和 make 做比较;

(4)功能强大:Ant 能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你需要自己开发一些 ant 插件的时候,你会发现它更多的功能。

Ant 于Make 的区别:make 是一个类似于Ant 的构建工具,不过make 应用于C/C++,Ant 则主要应用于java。当然这不是定的,当大部分人如此。

2. 自己写的一个例子

2.1 首先你建个java 项目。就写个Hello ant的小代码就可以了~,这就不说了。

       然后在写一个build.xml文件。具体内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
(1) 建一个src 文件夹,然后写一个HelloWorld.java,按照包结构目录放进去;
(2) 写build.xml 文件
(3) 在命令行输入 cmd, ant 做测试。
-->
<project name="Ant_Testing" 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>
	<!-- 打jar 包 -->
	<target name="jar" depends="compile">
		<jar destfile="${hello_jar}" basedir="${dest}"></jar>
	</target>
	<!-- 运行jar 包内的程序-->
	<target name="run" depends="jar">
		<java classname="ant.HelloAnt" classpath="${hello_jar}"/>
	</target>
	<!-- 删除生成文件-->
	<target name="clean">
		<delete dir="${dest}"/>
		<delete file="${hello_jar}"/>
	</target>
	<!-- 再次运行,这里显示了如何在一个 target 里边调用其他的 target -->
	<target name="return" depends="clean,run">
		<ant target="clean"/>
		<ant target="run"/>
	</target>
</project>

ant 中的每一个任务都可以这样执行,ant + target name

3.核心概念详解

3.1 project 属性

Attribute Description Required
name 项目名称,可自由定义。
default 定义一个缺省(默认)的target,当我们执行没有指定
target 的build.xml 时,就会执行这个缺省的target。
basedir 用于定义项目的基路径。
description 表示项目的描述
3.2 property 属性

一个项目可以有很多的property。可以在buildfile 中用property task 来设定,或者在ant 之外设定。一个property 有一个名字和一个值。Property 可以用于task 的属性值。这是通过将属性名放在“${}”之间并放在属性值的位置来实现的。例如有一个property builddir 的值是“build”,这
个property 就可用于属性值:${builddir}/classes。这个值就可被解析为 build/class。
典型的如第一讲中的例子,
首先设定property:
<property name="src" value="src" />
<property name="dest" value="classes" />
然后在其他地方引用property:
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}" />
</target>

3.3 内置属性

除了Java 的内置属性外,Ant 还定义了一些自己的内置属性:

Attribute Description
basedir 可以理解为project 项目的绝对路径,于<project>中的
basedir 属性一样
ant.file buildfile 的绝对路径
ant.version ant 的版本
ant.propertie.name 当前执行的project 的名字,由<project>的name 属性设定
ant.java.version ant 检测到的jvm 版本。

3.4 target 属性

Attribute Description Required
name target 的名字。
depends 用逗号分隔的target 的名字列表,也就是依赖列表
if 执行target 需要清除设定的属性名
unless 执行target 需要清除设定的属性名
description 描述target 的功能,这些描述可由-projexthelp 命令行
输出。

3.4.1

depends

target 中的depends 属性指定了target 的执行顺序,也就是说一个target 可以依赖其他的target。Ant 会依照depends 属性中的target 出现顺序依次执行每个target。在执行前,首先需要执行它所依赖的target。例如,有一个用于编译的target,一个用于生成执行文件的target。在生成执行文件之前必须先编译通过,所以生成可执行文件的target 依赖于编译target。Ant 会处理这种依赖关系。我们还要注意到,Ant 的depends 属性只指定了target应该被执行的顺序。如果被依赖的target无法运行,这种 depends 对于指定了依赖关系的其他target 没有影响。Ant 会依照depends 属性中target 出现的顺序依次执行每个target。然而,要记住的是只要某个target 依赖于一个target,后者就会被先执行。看下面的例子。

<target name="A"/>
<target name="B"
depends="A"/>
<target name="C"
depends="B"/>
<target name="D"
depends="C "/>
假设我们默认的target 是D,因为D 依赖于C,
C 依赖于B,B 依赖于A。所以先执行A,再执
行B,然后是C,最后D 被执行。
还可以写为这样的格式: <target name="D" depends="C,B,A"/>,执行顺序和上面的一样。另外,一个target 只能执行一次,即使有多个target 依赖于它,也只执行一次。

2.4.2 if / unless

如果执行某个target,由某些属性是否被设定来决定。这样,就能根据系统的状态(java version,OS, 命令行属性定义等等)来更好的控制build 的过程。要想让一个target 这样做,你就应该在target元素中,加入if 或unless 属性,带上target 应该有所判断的属性。看下面的例子。

<target name="install-windows" if="osfamily-windows">
<target name="install-unix" if="osfamily-unix">
如果没有if 或者else,target 总会被执行。


3.5 task 属性

一个task 是一段可执行的代码。task 可以有多个属性(也可以叫变量)。属性值可能包含对property 的引用。这些应用会在task 执行前被解析。

<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}" />
</target>
其中的<javac srcdir="${src}" destdir="${dest}" /> 就是一个task。
其中的 ${src} 就是对前面定义的property 的引用。再执行javac 之前这些${*}
会被解析。

下面是task 的一般构造形式:
<name attribute1=”value1” attribute2=”value2” … />
这里name 是task 的名字,attribute 是属性名,value 是属性值。

另外,我们可以使用内置的task 和一些可选的task,我们也可以编写自己的task。

你可能感兴趣的:(ANT详解及运行小例子)