热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ant工具学习

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

今天在使用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;

构建文件包括元素,以及其中嵌套的 元素。

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元素可用作task的属性值。在task中是通过将属性名放在“${”和“}”之间,并放在task属性值的位置来实现的。

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

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

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

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

ant.version:Ant的版本,在本文中,值为1.7.0;

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

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


4. Java相关


1)Javac

编译java原代码

例子

1.

destdir="{build}"

classpath="xyz.jar"

debug="on"

/>

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

2)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)

 

destdir="{src}"

classpath="{classpath}"

debug="on"

/>

路径是在property中定义的

4)打包相关

jar

将一组文件打包

例子:

1.

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

2.

basedir="{build}/classes"

includes="mypackage/test/**"

excludes="**/Test.class"

/>

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

3.

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在哪个里面。。。。

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



推荐阅读
author-avatar
张骞2502860155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有