Ant 工具学习

今天在使用eclipse集成了的Ant工具build时,发生错误:

BUILD FAILED
/workspace/xxx/build.xml:49: Cannot find /workspace/xxx/C:/android-sdk-windows/tools/ant/build.xml imported from /workspace/xxx/build.xml

因为以前没怎么用过这,也不知道到底错在哪里了;查看了下工程的build.xml文件,感觉没有错阿,自己sdk/tools/ant下也存在build.xml文件阿;

后来才在自己的工程下的project.properties文件下发现了错误所在;原来是我sdk的路径写错了。。。


既然开始使用ant了,我就想着先了解学习学习下这个工具吧!


1. 什么是Ant

Ant是一个基于Java的生成工具;在软件开发中用来将源代码和其他输入文件生成可执行文件;实现项目的自动构建和部署,确保每次的生成版本一致。


2. Ant的安装

一般Eclipse,MyEclipse等都已经给我们预先集成好了Ant,不需要我们生动安装;

当然你也可以选择自己安装;一般就是自己去下载个Apache Ant, 解压,然后添加系统环境变量:ANT_HOME,该变量指向Ant解压后的根目录

为了能让系统自动找到Ant 需要在系统环境变量path中添加Antbin目录;

完成后在命令行输入Ant就可以用啦~


3. Ant的关键元素

Ant的构建是基于XML编写的,默认名称为build.xml;

构建文件包括<project>元素,以及其中嵌套的<target>、<property> 和<path> 元素。

1)project元素

project元素是Ant构建文件的根元素,每个构建文件至少包含一个project元素;在每个project元素下可包含多个target元素

接下来看看project元素的各个属性:

name:用于指定project的名称

default:用于指定执行project默认执行时所执行的target名称

basedir:用于指定基路经的位置;该属性可以被basedir property覆盖。当覆盖时,该属性被忽略。如果属性和basedir property都没有设定,就使用buildfile文件的父目录。

2)target元素

它为Ant的基本执行单元,可以包含一个或多个具体任务;多个target可以存在相互依赖关系

接下来看看target元素的各个属性:

name:指定target元素的名称,这个属性在一个project元素中是唯一的

depends:用于描述target之间的依赖关系;若与多个target存在依赖关系时以“,”间隔;Ant会依据depends中target出现的先后顺序进行执行,被依赖的target先执行

if:用于验证指定的属性是否存在,若不存在,所在的target将不会被执行

unless:与if功能恰好相反,也用于验证指定的属性是否存在,若不存在,则target会被执行

description:对target功能的简单描述和说明

3)property元素

该元素可看作参量或者参数的定义,project的属性可以通过property元素来设定,也可在Ant之外设定。若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:<property file=” build.properties”/>

property元素可用作task的属性值。在task中是通过将属性名放在“${”和“}”之间,并放在task属性值的位置来实现的。

Ant提供了一些内置的属性,它能得到的系统属性的列表与Java文档中System.getPropertis()方法得到的属性一致,这些系统属性可参考sun网站的说明。

同时,Ant还提供了一些它自己的内置属性,如下:

basedirproject基目录的绝对路径,该属性在讲解project元素时有详细说明,不再赘述;

ant.filebuildfile的绝对路径,如上面的各例子中,ant.file的值为E:"build.xml

ant.versionAnt的版本,在本文中,值为1.7.0

ant.project.name:当前指定的project的名字,即前文说到的projectname属性的值;

       ant.java.version Ant 检测到的JDK 的版本


4. Java相关
1)Javac

编译java原代码

例子

1.<javac srcdir="{src}"

destdir="{build}"

classpath="xyz.jar"

debug="on"

/>

编译{src}目录及其子目录下的所有。Java文件,。Class文件将放在{build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息

2)<javac srcdir="{src}:{src2}"

destdir="{build}"

includes="mypackage/p1/**,mypackage/p2/**"

excludes="mypackage/p1/testpackage/**"

classpath="xyz.jar"

debug="on"

/>

编译{src}和{src2}目录及其子目录下的所有。Java文件,但是package/p1/**,mypackage/p2/**将被编译,而mypackage/p1/testpackage/**将不会被编译。Class文件将放在{build}指定的目录下,classpath表示需要用到的类文件或者目录,debug设置为on表示输出debug信息

3)

<property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/>

 

<javac srcdir="{src}"

destdir="{src}"

classpath="{classpath}"

debug="on"

/>

路径是在property中定义的

4)打包相关

jar

将一组文件打包

例子:

1.<jar destfile="{dist}/lib/app.jar" basedir="{build}/classes"/>

将{build}/classes下面的所有文件打包到{dist}/lib/app.jar中

2.<jar destfile="{dist}/lib/app.jar"

basedir="{build}/classes"

includes="mypackage/test/**"

excludes="**/Test.class"

/>

将{build}/classes下面的所有文件打包到{dist}/lib/app.jar中,但是包括mypackage/test/所有文件不包括所有的Test.class

3.<jar destfile="{dist}/lib/app.jar"

basedir="{build}/classes"

includes="mypackage/test/**"

excludes="**/Test.class"

manifest="my.mf"

/>

manifest属性指定自己的META-INF/MANIFEST.MF文件,而不是由系统生成


##

我eclipse运行提示错误:

Dx 1 error; aborting
Conversion to Dalvik format failed with error 1

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes

看提示详情是某文件的路径不匹配。。但是我有好多jar文件,根本不知道那个class在哪个里面。。。。

然后捣腾了一下午还没有解决。。。好忧桑


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值