ant学习(二)--快速开始

上次讲了ant的安装和配制,这一节主要来看一个例子来体验一下ant的魅力。

在开始例子之前,首先来看一下ant安装包目录结构

ant
   +--- README, LICENSE, fetch.xml, 其它文件. //一些提供基本信息的文件
   +--- bin  //这个目录下包含了一些启动ant的bat、shell等脚本
   |
   +--- lib  // 包含ant 及其依赖的jar
   |
   +--- docs // 一些文档放在这个目录下
   |      |
   |      +--- images  // 文档里面的一些图片
   |      |
   |      +--- manual  // ant文档
   |
   +--- etc // 包含有各种作用的xsl文件:
            //   - 创建一个各种任务输出到xml的加强报告
            //   - 迁移您的构建文件和摆脱“过时”的警告
            //   - ... 其它作用 ;-)

这一个本来应该放在第一节的。这里补充一下:)

开始我们的例子

设想好构架

首先在上面的ant目录下新建一个test文件夹,以保存我们的例子,(当然你也可以在其它地方,这个依个人习惯)。

在test目录下有这样一个目录结构。

 

 test
     +---src
            |
            +---com
                     |
                     +---sample
                               |
                               +---Project.java

Project.java代码如下:

 

//这里的代码可以随意,不写都没关系
public class Project 
{
    public static void main(String args[]) 
    {	
		
	System.out.println("test!"); 
		
    }
}
 

这个目录很像eclipse里面看到的项目结构,test就一个项目,要的就是这种效果:)

那我们如果用ant对这个项目进行编译、执行、打包呢?

首先我们要做的事是想好要把编译和打包后的class、jar文件放在哪里,我这里打算把编译的class文件夹放在test/build/classes文件夹下,把打包后的jar文件放在test/build/libs下。这里并不是真的要自己去建build、classes、libs文件夹,我会让ant自己去建些文件夹。

 

编写ant配制文件

下面将开始最关键的步骤,编写ant的build.xml文件。ant要做的事都写在这个文件里面,我把它放在test目录下。build.xml文件如下:

 

<?xml version="1.0" encoding="GB2312" ?>
<project name="main" default="complie" basedir=".">
	<property name="src.dir" value="src"/>
	<property name="build.dir" value="build"/>
	<property name="build.lib" value="${build.dir}/lib"/>
	<property name="build.classes" value="${build.dir}/classes"/>

    <!-- build directories -->
	<target name="prepare">
		<mkdir dir="${build.dir}"/>
		<mkdir dir="${build.lib}"/>
		<mkdir dir="${build.classes}"/>
	</target>

	<!--javac code-->
	<target name="complie" depends="prepare">
		<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/>
	</target>

	<!--java code-->
	<target name="run" depends="complie">
		<java classname="Project" classpath="${build.classes}"/>
	</target>

	<!-- jar code -->
	<target name="jar" depends="complie">
		<jar jarfile="${build.lib}/Project.jar" 
				basedir="${build.classes}" >
			<manifest>
				<attribute name="Main-class"  value="Project"/>
			</manifest>
		</jar>
	</target>

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

</project>
 

对上面build.xml进行分析

 

<?xml version="1.0" encoding="GBK2312" ?>

这一句xml文件基本都有,需要注意的是encoding="GB2312" 这一句,如果不写或写成encoding="UTF-8",文件中有中文时会报错.

 

<project name="test" default="complie" basedir=".">

</project>

ant的所有内容必须包含在这个里边,name是你给它取的名字(任意写),basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的任务。

 

 

<property name="src.dir" value="src"/>

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

<property name="build.lib" value="${build.dir}/lib"/>

<property name="build.classes" value="${build.dir}/classes"/>

这一堆是类似定义了java里面的变量(name是变量名,value是值),${XXX} 就是取上面定义的值。

 

 

 

 <!-- build directories -->

<target name="prepare">

<mkdir dir="${build.dir}"/>         //建build文件夹

<mkdir dir="${build.lib}"/>         //建lib文件夹

<mkdir dir="${build.classes}"/> //建classes文件夹

</target>

这一陀是说定义了一个任务,名叫prepare。每个任务写成一个target,<mkdir>什么的就是建了一堆文件夹

 

 

 

<!--javac code-->

<target name="complie" depends="prepare">

<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/>

</target>

这里建了一个叫complie的任务,depends就是它所依赖要做的任务。比如ant执行到<target name="complie" depends="prepare">这里的时候,它发现有一个依赖,就会去判断prepare这个任务有没有被执行过,如果执行过了就直接执行complie这个任务,如果没有就执行prepare这个任务。

<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="on"/> 这句就是编译,javac命令应该都熟悉,srcdir是指定要编译的文件夹,destdir是指定编译后的class文件放置的文件夹。

 

 

 

<!--java code-->

<target name="run" depends="complie">

<java classname="Project" classpath="${build.classes}"/>

</target>

这里是运行java代码。要先做这个任务,就要先做complie。classname指定class文件,classpath指定class文件的位置。

 

 

 

<!-- jar code -->

<target name="jar" depends="complie">

<jar jarfile="${build.lib}/Project.jar" 

basedir="${build.classes}"> 

<manifest>

<attribute name="Main-class"  value="Project"/>

</manifest>

</jar>

</target>

打包成jar文件。jarfile指定要生成的jar(带路径),basedir指定要打包的class文件。

 

<manifest>

<attribute name="Main-class"  value="Project"/>

</manifest>

这个是在生成的jar文件里面的MANIFEST.MF文件里面加入”Main-class: Project“这样一句话。如果不加,你打包的jar文件,在命令行运行 java -jar Project.jar 会报错。

 

 

<target name="clean">

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

</target>

这个就是把build文件夹删除。如果运行这个任务的话,以前构建的东东就会被删除掉,可以重新构建。可以在prepare加了这个作为依赖。

 

运行

开始-->运行-->cmd进入命令行-->进入test目录

输入ant,就会默认运行complie任务,你也可以输入ant compile 、ant clean、ant run、ant jar 单独一个。

 

结果

假设你输入了ant jar,我们来看一下,现在的test文件夹下是怎么样子的。

test
     +---src
      |     |
      |     +---com
      |              |
      |              +---sample
      |                        |
      |                        +---Project.java
      |---build
      |         |
      |         +---classes
      |         |           |
      |         |           +---Project.class
      |         +---libs
      |                   |
      |                   +---Project.jar
      |---build.xml
 

 

 

 

 

 

猜你喜欢

转载自jarvi.iteye.com/blog/1561704
今日推荐