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包不能衝突。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章