学习使用Eclipse中的Ant的小实例

来源:互联网 发布:嘀哩嘀哩网站下载软件 编辑:程序博客网 时间:2024/05/08 16:32

Ant的优点 
Ant是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点。跨平台性。Ant是存Java语言编写的,所示具有很好的跨平台性。操作简单。Ant是由一个内置任务和可选任务组成的。Ant运行时需要一个XML文件(构建文件)。Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。由于Ant构建文件时XML格式的文件,所以和容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

Ant 开发Ant的构建文件当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。 
(1) src存放文件。 
(2) class存放编译后的文件。 
(3) lib存放第三方JAR包。 
(4) dist存放打包,发布以后的代码。 
Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。 
(1) 核心任务。核心任务是Ant自带的任务。 
(2) 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。 
(3) 用户自定义的任务。用户自定义的任务实用户自己开发的任务。 

在有eclipse集成环境下ant其实不是很重要,但有些项目需要用到,另外通过eclipse来学习和理解ant是个很好的途径,所以写他demo总结下要点,希望能够帮到大家。

一、本人测试环境eclipse3.6已自动集成了ant环境, 所以就不用单独下载配置ant环境了。

如果没有eclipse集成环境可以自己下载ant http://www.apache.org/ 下载最新的版本
解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:ANT_HOME:D:\apache-ant-1.9.2,PATH:%ANT_HOME%\bin)
测试方法:开始-->运行-->cmd进入命令行-->键入 ant 回车,如果看到
Buildfile: build.xml does not exist!
Build failed
说明已经完成ant的设置。

二、体验ant 
就像每个语言都有HelloWorld一样,一个最简单的应用能让人感受一下Ant 
1. 首先你要知道你要干什么,我现在想做的事情是: 
编写一些程序->编译它们->把它打包成jar包->把他们放在应该放置的地方->运行它们
这里为了简单起见只写一个程序如下:

package test;/** * @author mijing * @version 2016年3月23日 上午10:24:59 */public class Test1 {public static void main(String[] args){System.out.println("hello");}}

2. 为了达到上边的目的,你可以手动的用javac 、copy 、jar、java来完成,但是考虑一下如果你有成百上千个类,在多次调试,部署的时候,一次次的javac 、copy、jar、java那将是一份辛苦的工作。现在看看ant怎么优雅的完成它们。

要运行ant需要有一个build.xml虽然不一定要叫这个名字,但是建议你这么做 
下边就是一个完整的build.xml,然后我们来详细的解释每一句

<?xml version="1.0" encoding="UTF-8"?><project name="testForAnt" default="run" basedir="."><!--properities--><property name="src.dir" value="src"/><property name="report.dir" value="report" /><property name="classes.dir" value="classes" /><property name="lib.dir" value="lib"/><property name="dest.dir" value="dest" /><property name="test_jar" value="test1.jar"/><!--定义classpath--><path id="master-classpath"><fileset file="${lib.dir}/*.jar" /><pathelement path="${classes.dir}"/></path><!--初始化任务--><target name="init"><mkdir dir="${dest.dir}"/></target><!--编译--><target name="compile" depends="init" description="compile the source files"><mkdir dir="${classes.dir}"/>    <javac srcdir="${src.dir}" destdir="${classes.dir}" ><classpath refid="master-classpath"/>    </javac></target><!--测试--><target name="test" depends="compile" description="run junit test"><mkdir dir="${report.dir}"/></target><!--打包成jar--><target name="build" depends="compile"><jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}"></jar></target><!--<target name="pack" depends="compile" description="make .jar file"><jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}"></jar>  </target>--><target name="run" depends="build">   <java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/></target><target name="clean" >   <delete dir="${test.dir}" /></target><target name="rerun" depends="clean,run">   <ant target="clean" />   <ant target="run" /></target></project>

解释:

<?xml version="1.0" encoding="UTF-8" ?> 
build.xml中的第一句话,没有实际的意义

<project name="testForAnt" default="run" basedir="."> 
</project> 
ant的所有内容必须包含在这个里边,name是你给它取的名字,即工程名字,basedir顾名思意就是工作的根目录。.代表当前目录。default代表默认要做的事情。

<!--properities-->
<property name="src.dir" value="src"/>
<property name="report.dir" value="report" />
<property name="classes.dir" value="classes" />
<property name="lib.dir" value="lib"/>
<property name="dest.dir" value="dest" />
<property name="test_jar" value="test1.jar"/>

类似于程序中的全局变量,这样在下面如果多次使用某个值时,直接引用name变量名即可,在之后的修改中,也只需要修改此处的value即可。在后面的使用中,只需要使用"${name}"即可使用对应的变量。

<!--初始化任务-->
<target name="init">
<mkdir dir="${dest.dir}"/>
</target>

把你想做的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,若与多个target存在依赖关系时,需要以“,”间隔。Ant会依照depends属性中target出现的顺序依次执行每个target。被依赖的target会先执行。例如在本build.xml文件中,在执行这个target(例如这里的compile)之前ant会先检查init是否曾经被执行过,如果执行过则直接执行compile,如果没有则会先执行它依赖的target例如这里的init,然后在执行这个target

如我们的计划 

<!--编译-->
<target name="compile" depends="init" description="compile the source files">
<mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" >
<classpath refid="master-classpath"/>
    </javac>
</target>
<!--测试-->
<target name="test" depends="compile" description="run junit test">
<mkdir dir="${report.dir}"/>
</target>
<!--打包成jar-->
<target name="build" depends="compile">
<jar jarfile="${dest.dir}/${test_jar}" basedir="${classes.dir}">
</jar>
</target>
<!--
<target name="pack" depends="compile" description="make .jar file">
<jar destfile="${dest.dir}/test1.jar" basedir="${classes.dir}">
</jar>  
</target>-->

<!--运行-->
<target name="run" depends="build">
   <java classname="test.Test1" classpath="${dest.dir}/${test_jar}"/>
</target>

为了不用拷贝,我们可以在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了 ,即在打包的target为build时,jarfile记为要存储的jar包路径和名称,basedir为class文件的位置

为了更多一点的功能体现,又加入了两个target 
删除生成的文件 

<target name="clean" >
   <delete dir="${test.dir}" />
</target>

再次运行,这里显示了如何在一个target里边调用其他的target 

<target name="rerun" depends="clean,run">
   <ant target="clean" />
   <ant target="run" />
</target>

在eclipse中使用时,右键build.xml文件,选择Run as -->Ant Build即可。

运行结果如下所示:


对于上述警告warning: 'includeantruntime' was not set,只需要在target为compile处加上includeantruntime="on",即如下:

<target name="compile" depends="init" description="compile the source files">
<mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"  includeantruntime="on">
<classpath refid="master-classpath"/>
    </javac>
</target>

在命令行使用ant时,键入ant ,你会发现一个个任务都完成了。每次更改完代码只需要再次键入ant。

有的时候我们可能并不想运行程序,只想执行这些步骤中的某一两个步骤,例如我只想重新部署而不想运行,键入 
ant build

ant中的每一个任务都可以这样调用ant + target name 
好了,这样一个简单的ant任务完成了。


0 0
原创粉丝点击