您的位置:首页 > 其它

Ant使用指南

2013-04-02 11:05 260 查看
一,写一个简单的构建文件

Apache Ant的构建文件被写成xml文件。每一个构建文件包含一个project(工程),和至少一个(默认的)target。Targets

包含task(任务)节点。每一个task(任务)节点可以有一个id属性。下面介绍一下构建文件中的一些节点。

project:跟节点

每个project可以有三个属性

name:不是必须的

default:设置默认执行的target,不是必须的

basedir:基本的目录,其他所有的路径计算问题的基础。这个可以被basedir属性(暂时不知道是哪里的属性)覆盖。如果上述

两者都没有设置,构建文件的父路径将会被使用。不是必须的

可选的:

在project点下可以提供一个<description>节点

每个工程下定义一个或多个targets(目标)。每个工程是你想要执行的tasks(任务)的集合。当开始ant,你可以选择执行哪个target去执行。

如果没有指定任务,工程的默认属性将会被用到。

targets:节点

一个target可以依赖其他的targets(任务)。你可以用target来进行编译。比如:一个target用来创建一个发行版本。

当你编译完成之后,你才能构建一个发行版本,所以这个发行版本的target(depends)依赖于编译(target)。

需要注意的是:ant的depands(依赖)属性仅仅指定了执行的顺序,它不影响是否目标会执行,如果依赖target目标没有运行。

tasks

一个task是一个段要执行的代码。

一个task可以有多个属性(attribute)。这个属性的值也可以包含一个属性(property 下面介绍)。这个属性在这个task执行的时候会被替换。

Tasks(任务)的结构如下:

<name attribute1="value1" attribute2="value2" ... />

name就是你这个task的名字,attributeN就是属性的名字,valueN就是对应的属性的值。

所有的任务共用一个name属性,属性的值被被ant自动生成的日志信息中用到。

Tasks(任务)可以有一个id属性:

<taskname id="taskID" ... />

taskname是task(任务)的名字,taskID就是task(任务)非必要的标示符。你也可以在脚本中些task对象。比如:

<script ... >

task1.setFoo("bar");

</script>

用以上设置foo的属性之。如果在java程序中,你可以接收到这个实例化对象通过 via project.getReference("task1").

properties

属性是一个重要的方法来定制一个构建过程或仅提供快捷键的字符串重复使用在一个构建文件。

在其最简单的形式属性定义在构建文件(例如,属性任务)或可能在外边设置。

一个属性都有一个名称和一个值;

名称是区分大小写的。

属性可用于任务属性的值或嵌套文本的任务。这个可以通过将属性名之间“$ {”和“}”引用属性值。

例如,如果有一个“builddir”属性值为“build”,

那么这可能是用这个属性,像这样:$ { builddir } /classes。这是在运行时解析作为 build/classes。

随着ant1.8的发展 property 有了更强的作用,而不只是作为一个键值对存放。

例子:一个简单的ant构建文件

<project name="MyProject" default="dist" basedir=".">

<description>

simple example build file

</description>

<!-- set global properties for this build 定义路径的时候要使用location 不要使用 value ,

因为location会自动根据当前系统把路径分隔符转换成相应的格式(/\),而value只是存储单纯的字符串-->

<property name="src" location="src"/>

<property name="build" location="build"/>

<property name="dist" location="dist"/>

<target name="init">

<!-- Create the time stamp -->

<tstamp/>

<!-- Create the build directory structure used by compile -->

<mkdir dir="${build}"/>

</target>

<target name="compile" depends="init"

description="compile the source " >

<!-- Compile the java code from ${src} into ${build} -->

<javac srcdir="${src}" destdir="${build}"/>

</target>

<target name="dist" depends="compile"

description="generate the distribution" >

<!-- Create the distribution directory -->

<mkdir dir="${dist}/lib"/>

<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->

<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>

</target>

<target name="clean"

description="clean up" >

<!-- Delete the ${build} and ${dist} directory trees -->

<delete dir="${build}"/>

<delete dir="${dist}"/>

</target>

</project>

注意我们定义properties在任何target的外边。

以上为翻译,以下为笔记

1,使用ant的标准

生成是三个文件夹

build:存放所有的文件信息

src:存放源码

classes:存放编译的classes文件

dist:存放编译生成的jar包

使用ant编译普通java项目的流程:

1,创建上述四个文件夹

2,将src文件夹的数据拷贝到build/src中

3,编译源代码

4,将源代码打包为jar

5,直接运行程序

2,eclipse中配置ant

一,选择proferences--Ant可以配置Document URL配置文档的路径

二,Ant-runtime--AntHome(默认是jdk的目录)需要修改

三,在工程根目录中创建build.xml

四,open with Ant editor 即可

3,下面介绍几个任务

<mkdir dir="build" />创建目录

<delete dir="build" />删除目录

<fileset id="src.path" dir="src" includes="**/*.java"></fileset> 设置文件集

另外一种定义方法

<fileset id="src.path" dir="src">

<include name="**/*.*" />

<exclude name="**/*.perperties" />

</fileset> 设置文件集

<copy todir="build/src">

<fileset dir="src" includes="**/*.*"></fileset>

<!--也可以这样写-->

<fileset refid="src.path"></fileset>

</copy>

<javac destdir="build/classes" srcdir="src" />制定javac编译命令,试用destdir指定目的目录,srcdir制定源码目录

打包

<jar destfile="build/dist/hello.jar" basedir="build/classes"></jar>

在包中存在META-INF文件夹,在文件夹中有MAINFEST.MF文件,可以制定mainclass,执行运行的class

执行Main-Class

<jar destfile="build/dist/hello.jar" basedir="build/classes">

<mainfest>

<attribute name="Main-Class" value="ant.xxxxx.xxx.HelloWorld" />

<attribute name="Build-By" value="kenan" />

<mainfest>

</jar>

<echo>hello</echo>直接输出字符串

运行java文件:基于类路径执行

<java classname="xxxxx.HelloWorld" classpath="build/classes">

<arg value="张三" />

<arg value="李四" />

<arg value="王五" />

</java>

运行java文件:基于jar文件,fork=true设置使用jdk的编译环境

<java jar="build/dist/hello.jar" fork="true">

<arg value="张三" />

<arg value="李四" />

<arg value="王五" />

</java>

定义属性

<property name="build.dir" location="build"></property>

<property name="build.classes" location="build/classes"></property>

<property name="build.lib" location="build/dist"></property>

<property name="build.src" location="build/src"></property>

使用的时候

${build.dir}

也可以把属性放在properties文件中定义

pro.properties

build.dir = build

<property file="pro.perties"></property>

通过以上标签引入属性文件中的键值对

ant中属性(算是系统属性,可以直接引用)

ant.file 构建文件的绝对路径

ant.home ant的home路径

ant.java.version ant检测到的jvm的版本

ant.version ant的版本号

basedir 项目基目录的绝对路径

导入系统环境变量到env这个变量中

<property environment="env" ></property>

${env.JAVA_HOME}...引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: