ant学习

ant其实就是一个java的build工具,可以用来打jar或者war包

当前最新的版本是Ant1.8.1 ,下载地址:http://ant.apache.org/bindownload.cgi

配置很简单,在环境变量PATH加上 ant目录\bin就可以了

如果build.xml解析失败,可以加上

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

或者是加上

<?xml version="1.0" encoding="UTF-8" ?>

 

一、最简单的运用

首先写一个HelloWorld的类,放到src目录下

public class HelloWorld{
	public static void main(String args[]){
		System.out.println("Hello World!");
	}
}

 新建一个build.xml文件

<project name="HelloWorld" default="run" basedir="." >	<!-- 建一个project,默认执行为run -->
<description>Ant Test</description>	<!-- project描述 -->
<!-- 声明变量 -->
<property name="src.dir" value="src" />	<!-- 源文件目录 -->
<property name="dest.dir" value="classes" />	<!-- 目标目录,编译生成的class目录 -->
<property name="run.classpath" value="${dest.dir}" />	<!-- 执行的class所在目录 -->

<target name="init">		<!-- 初始化,先生成目标目录 -->
	<mkdir dir="${dest.dir}" />	<!-- mkdir新建目录 -->
</target>

<target name="compile" depends="init">	<!-- 编译,依赖于init -->
	<javac srcdir="${src.dir}" destdir="${dest.dir}"  includeantruntime="false">
	</javac>
</target>

<target name="run" depends="compile">	<!-- 运行,依赖于compile -->
	<java classname="HelloWorld" classpath="${run.classpath}" />
</target>

</project>

 

使用cmd进到build.xml 所在的目录,输入命令 ant 开始执行

每个target相当于一个模块,如果模块有依赖关系,则会先执行所依赖的模块

语法很简单,主要是三个  mkdir,javac,java

 

 上面的build.xml有一个缺点,编译成功一次之后,再次执行时如果修改代码出现错误无法编译,但是还是会出现执行结果,因为先前生成的HelloWorld.class还在。 改进一下

 

<project name="HelloWorld" default="run" basedir="." >	<!-- 建一个project,默认执行为run -->
<description>Ant Test</description>	<!-- project描述 -->
<!-- 声明变量 -->
<property name="src.dir" value="src" />	<!-- 源文件目录 -->
<property name="dest.dir" value="classes" />	<!-- 目标目录,编译生成的class目录 -->
<property name="run.classpath" value="${dest.dir}" />	<!-- 执行的class所在目录 -->

<target name="init">		<!-- 初始化,先生成目标目录 -->
	<mkdir dir="${dest.dir}" />	<!-- mkdir新建目录 -->
</target>

<target name="compile" depends="init">	<!-- 编译,依赖于init -->
	<javac srcdir="${src.dir}" destdir="${dest.dir}"  includeantruntime="false">
	</javac>
</target>

<target name="run" depends="compile">	<!-- 运行,依赖于compile -->
	<java classname="HelloWorld" classpath="${run.classpath}" />
</target>

<target name="clean">		<!-- 增加清除操作 -->
	<delete dir="${dest.dir}"/>
</target>

<target name="rerun" depends="clean">	<!-- rerun表示重新布署执行 -->
	<ant target="run" />
</target>

</project>

 

通过使用ant rerun命令,可以实现重新布署,以免使用了旧版本的class来执行

 

二、引入外部包

java的dt.jar这个J2SE的标准包,不需要自己去写引入。 这次写的是引入其它第三方的jar包,单独一个没什么说的,主要说的是多个jar包的通配。

新建一个lib目录,把需要到的jar包放入其中

把HelloWorld的代码改一下,引入servlet的类,需要到的包为servlet-aip.jar,这个包在tomcat的lib目录下都有的

改后的HelloWorld.java为

import java.util.Date;
import javax.servlet.Servlet;
public class HelloWorld{
	public static void main(String args[]){
		System.out.println("Hello World!");
		System.out.println(new Date());
	}
}

 build.xml改后如下:

<project name="HelloWorld" default="run" basedir="." >	<!-- 建一个project,默认执行为run -->
<description>Ant Test</description>	<!-- project描述 -->
<!-- 声明变量 -->
<property name="src.dir" value="src" />	<!-- 源文件目录 -->
<property name="dest.dir" value="classes" />	<!-- 目标目录,编译生成的class目录 -->
<property name="run.classpath" value="${dest.dir}" />	<!-- 执行的class所在目录 -->

<path id="compile.classpath">               <!-- 编译所需要的包 -->
	<fileset dir="lib">                    <!-- 使用fileset进行通配 -->
		<include name="*.jar" />
	</fileset>
</path>

<target name="init">		<!-- 初始化,先生成目标目录 -->
	<mkdir dir="${dest.dir}" />	<!-- mkdir新建目录 -->
</target>

<target name="compile" depends="init">	<!-- 编译,依赖于init -->
	<javac srcdir="${src.dir}" destdir="${dest.dir}"  includeantruntime="false">
		<classpath refid="compile.classpath" />   <!-- 编译加上CLASSPATH -->
	</javac>
</target>

<target name="run" depends="compile">	<!-- 运行,依赖于compile -->
	<java classname="HelloWorld" classpath="${run.classpath}" />
</target>

<target name="clean">		<!-- 增加清除操作 -->
	<delete dir="${dest.dir}"/>
</target>

<target name="rerun" depends="clean">	<!-- rerun表示重新布署执行 -->
	<ant target="run" />
</target>

</project>

 

使用了path做为基点,再使用fileset进行多个jar包的通配,就可以达到把相应的jar导入到CLASSPATH的效果

如果你的第三方jar包放在多个目录,可以相应的把path改一下

<path id="compile.classpath">               <!-- 编译所需要的包 -->
	<fileset dir="lib">                    <!-- 使用fileset进行通配 -->
		<include name="*.jar" />
	</fileset>
	<fileset dir="TOMCAT_HOME\lib">                    <!-- 其它位置的jar包 -->
		<include name="*.jar" />
	</fileset>
	<pathelement path="${basedir}/lib/servlet-api.jar"/> <!-- 绝对路径下单独的包 --> 
	<pathelement location="lib/servlet-api.jar"/>   <!-- 相对路径下的单独包 -->
	<filelist dir="lib" dir="lib">     <!-- 使用filelist加载,这个可以加载相对路径的,也可以加载绝对路么的,但是不能通配,只能写全名 -->
		<file name="servlet-api.jar" />
	</filelist>
</path>

 

上面一共演示了四种加载情况,可以相互嵌套和多次使用,当然jar包不能冲突。

你可能感兴趣的:(tomcat,xml,servlet,ant,J2SE)