下載與安裝
- 在ant.apache.org可以找到下載的界面,根據推薦下載1.10.1的版本。
- 解壓到安裝目錄,解壓後的目錄有manual文件夾,包含Ant工具相關文檔。
- ant的運行需要JAVA_HOME環境變量指向jdk,以及ANT_HOME的環境變量指向Ant的安裝路徑。需要識別ant.bat命令,還需要吧%ANT_HOME%\bin 加到Path環境變量中。
- 使用ant工具只要輸入ant或者ant.bat,Ant會在目錄下搜索build.xml文件,作爲生成文件執行默認的target。
- 使用-s 或者-find ,Ant會在上級目錄中搜索生成文件,直到到達文件系統根目錄。
- ant也可以使用-buildfile使用其他文件作爲生成文件,這裏的-buildfile也可以使用-file或者-f代替。如下:
ant -f a.xml
ant -file b.xml
- ant運行只提示少量信息:-quite或者-q
- ant運行提示更多信息:-verbose或者-v
- ant運行將提示信息輸出到指定文件,而不是直接輸出到控制檯,-logfile 或者-l,例如:
ant -verbose -l a.log //運行ant時生成更多提示信息,並將信息輸出到a.log中
- 使用類似-D=可以將指定value來覆蓋property的屬性值。
ant -Dbook=Spring4 //覆蓋生成文件中的book屬性
ant -Denvl=%ANT_HOME% //這樣可以使用Windows的環境變量,在生成文件中,可以使用$envl來訪問該環境變量的值
ant -help獲取幫助文檔
典型的項目層次結構:
<priject>
-src:源文件、配置文件
-classes:編譯後的class文件
-lib:第三方jar包
-dist:存放項目打包、項目發佈文件的文件夾
build.xml:Ant生成文件
- Ant生成文件的根元素是project,每個項目下可以定義多個生成目標,每個目標使用target元素來定義。project元素的屬性包括:
屬性 | 含義 |
---|---|
default | 默認target |
basedir | 指定項目的基準路徑 |
name | 項目名 |
description | 項目描述信息 |
- target元素的屬性
屬性 | 含義 |
---|---|
name | target名稱 |
depends | 指定一個或多個target,表示運行該target之前需要運行的target |
if | 指定一個屬性名,表示僅當設置了該屬性才執行該target |
unless | 設置一個屬性名,表示僅當沒有設置該屬性才執行該target |
description | 描述信息 |
- 每個生成目標(target)可以對應一個或多個任務序列,如:
<name attribute1="value1" attribuute2="value2">
name爲任務的名稱,attribute和value爲執行該任務需要的屬性名與屬性值。
以下是一份《輕量級JAVAEE 企業應用實戰的》的生成文件:
<?xml version="1.0" encoding="GBK"?>
<!-- 定義生成文件的project根元素,默認的target爲空 -->
<project name="antQs" basedir="." default="">
<!-- 定義三個簡單屬性 -->
<property name="src" value="src"/>
<property name="classes" value="classes"/>
<property name="dest" value="dest"/>
<!-- 定義一組文件和目錄集 -->
<path id="classpath">
<pathelement path="${classes}"/>
</path>
<!-- 定義help target,用於輸出該生成文件的幫助信息 -->
<target name="help" description="打印幫助信息">
<echo>help - 打印幫助信息</echo>
<echo>compile - 編譯Java源文件</echo>
<echo>run - 運行程序</echo>
<echo>build - 打包JAR包</echo>
<echo>clean - 清除所有編譯生成的文件</echo>
</target>
<!-- 定義compile target,用於編譯Java源文件 -->
<target name="compile" description="編譯Java源文件">
<!-- 先刪除classes屬性所代表的文件夾 -->
<delete dir="${classes}"/>
<!-- 創建classes屬性所代表的文件夾 -->
<mkdir dir="${classes}"/>
<!-- 編譯Java文件,編譯後的class文件放到classes屬性所代表的文件夾內 -->
<javac destdir="${classes}" debug="true" includeantruntime="yes"
deprecation="false" optimize="false" failonerror="true">
<!-- 指定需要編譯的Java文件所在的位置 -->
<src path="${src}"/>
<!-- 指定編譯Java文件所需要第三方類庫所在的位置 -->
<classpath refid="classpath"/>
</javac>
</target>
<!-- 定義run target,用於運行Java源文件,
運行該target之前會先運行compile target -->
<target name="run" description="運行程序" depends="compile">
<!-- 運行lee.HelloTest類,其中fork指定啓動另一個JVM來執行java命令 -->
<java classname="lee.HelloTest" fork="yes" failonerror="true">
<classpath refid="classpath"/>
<!-- 運行Java程序時傳入2個參數 -->
<arg line="測試參數1 測試參數2"/>
</java>
</target>
<!-- 定義build target,用於打包JAR文件,
運行該target之前會先運行compile target -->
<target name="build" description="打包JAR文件" depends="compile">
<!-- 先刪除dest屬性所代表的文件夾 -->
<delete dir="${dest}"/>
<!-- 創建dest屬性所代表的文件夾 -->
<mkdir dir="${dest}"/>
<!-- 指定將classes屬性所代表的文件夾下的所有
*.classes文件都打包到app.jar文件中 -->
<jar destfile="${dest}/app.jar" basedir="${classes}"
includes="**/*.class">
<!-- 爲JAR包的清單文件添加屬性 -->
<manifest>
<attribute name="Main-Class" value="lee.HelloTest"/>
</manifest>
</jar>
</target>
<!-- 定義clean target,用於刪除所有編譯生成的文件 -->
<target name="clean" description="清除所有編譯生成的文件">
<!-- 刪除兩個目錄,目錄下的文件也一併刪除 -->
<delete dir="${classes}"/>
<delete dir="${dest}"/>
</target>
</project>