【ANT】Ant簡明教程
一、Ant介紹
Ant是構建工具,用來實現軟體的自動化的構建,類似於VisualStudio的project檔案,Linux上構建C++的makefile,Ant通常用來構建Java程式。Ant是基於XML的檔案,所以更容易閱讀;Ant是用Java實現的,本身支援跨平臺;Ant基於外掛的方式開發,本身內建了常用的大部分的外掛,而且第三方的擴充套件也很容易;Ant除了用來構建Java程式,也可以用來構建其他的任何程式,例如C++等。
二、Ant的配置
1)安裝JDK,設定JAVA_HOME和classpath、path。
2)下載安裝Ant,且設定ANT_HOME和path。
3) 最後驗證是否安裝成功在命令列視窗中輸入ant,如果顯示
Buildfile: build.xml does not exist!
Build failed
則安裝成功。
三、Ant的基礎元素
1. Project元素
Project元素是Ant檔案的根元素,Ant構建檔案中至少應該包含一個project元素,否則會發生錯誤。在每個project元素下面可以包含多個target元素。project的屬性包括:
name : 指定專案名稱,該屬性僅指定一個名字,對編譯、生成專案沒有太大的實際作用。
default:指定預設的target,這個屬性是必需的。當執行ant命令沒有顯式指定target時,ant將執行此project的預設targe。
basedir:用於指定專案的基準路徑,屬性沒有指定時,使用Ant的構建檔案的父目錄作為基路徑。
description:指定專案的描述資訊,對編譯、生成專案沒有太大的實際作用。
例如:
< ?xml version="1.0" ?> < project name ="antPro" default ="getBaseDir" basedir ="."> <target name="getBaseDir"> <echo message="The base dir is: ${basedir}"/> </target> < /project>
在這裡定義了default 屬性的值為getBaseDir ,即當執行ant 命令時,如果沒有指定待執行的target,則將執行預設的target--getBaseDir 。
2)target元素
target為Ant的基本執行單元,他可以包含一個或多個具體的任務。
target的屬性有:
name: target的名稱,這個屬性在一個project中是唯一的。我們可以通過指定 target 元素的名稱來指定某個 target 。
depends:用來描述target間的依賴關係,若與多個 target 存在依賴關係時,需要以“,”間隔。 Ant 會依照 depends 屬性中 target 出現的順序依次執行每個 target 。被依賴的 target 會先執行。
if:用於驗證指定的屬性是否存在,若不存在,所在 target 將不會被執行。
unless:該屬性的功能與 if 屬性的功能正好相反,它也用於驗證指定的屬性是否存在,若不存在,所在 target 將會被執行。
description:該屬性是關於 target 功能的簡短描述和說明。
多個target可以存在相互依賴的關係。Ant會依照depends屬性中target出現的順序依次執行每個target。然而,要記住的是隻要某個target依賴於一個target,後者就會被先執行。
<target name="A"/>
<target name="B" depends="A"/>
<target name="C" depends="B"/>
<target name="D" depends="C,B,A"/>
假定我們要執行target D。從它的依賴屬性來看,你可能認為先執行C,然後B,最後A被執行。錯了,C依賴於B,B依賴於A,所以先執行A,然後B,然後C,最後D被執行。一個target只能被執行一次,即時有多個target依賴於它。
3)property元素
property元素用於定義一個或多個屬性,可看作程式語言中的變數或者引數的定義,project 的屬性可以通過 property 元素來設定,也可在 Ant 之外設定。例如<property name ="name" value ="philander"/>。若要在外部引入某檔案,例如 build.properties 檔案,可以通過如下內容將其引入<property file=” build.properties”/>。
舉例說明如下:
<? xml version="1.0" ?>
<project name ="propertyPro" default ="example">
<property name ="name" value ="philander"/>
<property name ="age" value ="25"/>
<target name ="example">
<echo message ="name: ${name}, age: ${age}"/>
</target>
</project>
上例中使用者設定了名為name 和age的兩個屬性,這兩個屬性設定後,在下文中可以通過 ${name} 和 ${age} 分別取得這兩個屬性值。
下面給出幾個使用property元素的例子:
<!-- 指定讀取foo.propertyies屬性檔案中的屬性名和屬性值 --> <property file="foo.properties"/> <!-- 指定從指定URL處讀取屬性名和屬性值 --> <property url="http://www.tjsinfo.com/ant/foo.properties"/> <!-- foo.propertyies屬性檔案內容舉例 author=LiYang book=Java price=18 --> <!-- 定義訪問作業系統環境變數的字首是env --> <property environment="env"/> <!-- 輸出JAVA_HOME的環境變數 --> <echo>${env.JAVA_HOME}</echo>
四、ANT常用命令
1. copy 命令
copy主要用來對檔案和目錄的複製功能。舉例如下:
eg1. 複製單個檔案:
<copy file="original.txt" tofile="copied.txt"/>
eg2. 對檔案目錄進行復制:
<copy todir="../dest_dir">
<fileset dir="src_dir"/>
</copy>
eg3. 將檔案複製到另外的目錄:
<copy file="source.txt" todir="../home/philander"/>
2. delete 命令
對檔案或目錄進行刪除,舉例如下:
eg1. 刪除某個檔案:
<delete file="/home/photos/philander.jpg"/>
eg2. 刪除某個目錄:
<delete dir="/home/photos"/>
eg3. 刪除所有的備份目錄或空目錄:
<delete includeEmptyDirs="true">
<fileset dir="." includes="**/*.bak"/>
</delete>
3. mkdir 命令
建立目錄。 eg :
<mkdir dir="/home/philander/build/classes"/>
4. move 命令
移動檔案或目錄,舉例如下:
eg1. 移動單個檔案:
<move file="sourcefile" tofile=”destfile”/>
eg2. 移動單個檔案到另一個目錄:
<move file="sourcefile" todir=”movedir”/>
eg3. 移動某個目錄到另一個目錄:
<move todir="newdir"> <fileset dir="olddir"/></move>
5. echo 命令
該任務的作用是根據日誌或監控器的級別輸出資訊。它包括 message 、 file 、 append 和 level 四個屬性,舉例如下
<echo message="Hello,ANT" file="/home/philander/logs/ant.log" append="true">
五、利用ant 構建和部署Java專案
Ant 可以代替使用 javac 、 java 和 jar 等命令來執行 java 操作,從而達到輕鬆的構建和部署 Java 專案的目的。
1. 利用ant 的javac命令來編譯Java程式
Ant 的javac命令用於實現編譯Java 程式的功能。下面來看一個簡單的例子:首先我們建立名為 JavaTestPro的Java專案,建立src目錄為原始碼目錄,在src目錄下建立HelloWorld.java這個類檔案。該類檔案的內容如下:
public class HelloWorld { public static void main(String[] args) { System.out.println("hello world!"); } }
同時在JavaTestPro專案的根目錄下建立build.xml 檔案,在該檔案中編譯src 目錄下的Java檔案,並將編譯後的class檔案放入build/classes 目錄中,整個專案的目錄結構如下:
|JavaTestPro
|src
|build
|classes
|build.xml
在編譯前,需清除classes 目錄,該檔案的內容如下:
<?xml version="1.0" ?> <project name ="javacTest" default="compile" basedir="."> <target name="clean"> <delete dir="${basedir}/build"/> </target> <target name="compile" depends ="clean"> <mkdir dir ="${basedir}/build/classes"/> <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> </target> </project>
在專案根目錄執行ant命令後,可在該目錄下發現新生成的build/classes子目錄,編譯後生成的HelloWorld.class檔案就在該目錄下。
2. 使用java命令執行Java程式
Ant 中可以使用 java命令實現執行Java程式的功能。可以在上面的build.xml基礎上做修改來實現:
<?xml version="1.0" ?> <project name ="javacTest" default="run" basedir="."> <target name="clean"> <delete dir="${basedir}/build"/> </target> <target name="compile" depends ="clean"> <mkdir dir ="${basedir}/build/classes"/> <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> </target> <target name="run" depends ="compile"> <java classname ="HelloWorld"> <classpath> <pathelement path="${basedir}/build/classes"/> </classpath> </java> </target> </project>
接著,就可以在控制檯看見輸出:"[java] hello world!"
3. 使用jar命令生成jar檔案
還可以在上例的基礎上更進一步,來生成jar包,可在run 這個 target 下再加上如下 target :
<?xml version="1.0" ?> <project name ="javacTest" default="jar" basedir="."> <target name="clean"> <delete dir="${basedir}/build"/> </target> <target name="compile" depends ="clean"> <mkdir dir ="${basedir}/build/classes"/> <javac srcdir ="${basedir}/src" destdir ="${basedir}/build/classes"/> </target> <target name="run" depends="compile"> <java classname ="HelloWorld"> <classpath> <pathelement path="${basedir}/build/classes"/> </classpath> </java> </target> <target name="jar" depends="run"> <jar destfile="helloworld.jar" basedir="${basedir}/build/classes"> <manifest> <attribute name="Main-class" value="HelloWorld"/> </manifest> </jar> </target > </project>
其中,project的default 屬性設定為應設為jar,ant執行完畢後,可看到在專案的根目錄下生成了一個 helloworld.jar的jar包 。可通過執行以下命令來執行該jar包:
java -jar helloworld.jar
六、使用war命令打包JavaEE專案
建立一個JavaEE專案,其中src 為Java原始碼目錄,WebContent為各jsp存放目錄,lib 為專案引用的的包的目錄。在WebTest專案目錄下建立了build.xml 檔案,該檔案為該工程的 Ant 構件檔案。
|WebContent
|src
|build
|classes
|WebContent
|META-INF
|WEB-INF
|lib
|classes
|HelloJSP.jsp
|build.xml
可以 src 目錄下放入在前續例子中開發的 HelloWorld.java 檔案,並在 WebContent下建立 HelloJSP.jsp 檔案,其內容很簡單,就是輸出 Hello 資訊,程式碼如下所示如下
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>war test for ant</title> </head> <body> Hello JSP!Hello Ant! </body> </html>
接下來編寫 build.xml 檔案,其內容如下:
<?xml version="1.0" encoding="UTF-8" ?> <project name ="WebTest" default ="war" basedir ="."> <property name ="classes" value ="${basedir}/build/classes"/> <property name ="build" value ="${basedir}/build"/> <property name ="lib" value ="${basedir}/WebContent/WEB-INF/lib"/> <!-- 刪除build 路徑--> <target name ="clean"> <delete dir ="${build}"/> </target> <!-- 建立build/classes 路徑,並編譯class 檔案到build/classes 路徑下--> <target name ="compile" depends ="clean"> <mkdir dir ="${classes}"/> <javac srcdir ="${basedir}/src" destdir ="${classes}"/> </target> <!-- 打war 包--> <target name ="war" depends ="compile"> <war destfile ="${build}/WebTest.war" webxml ="${basedir}/WebContent/WEB-INF/web.xml"> <!-- 拷貝WebRoot 下除了WEB-INF 和META-INF 的兩個資料夾--> <fileset dir ="${basedir}/WebContent" includes ="**/*.jsp"/> <!-- 拷貝lib 目錄下的jar 包--> <lib dir ="${lib}"/> <!-- 拷貝build/classes 下的class 檔案--> <classes dir ="${classes}"/> </war> </target> </project>
執行ant後,就生成了WebTest.war 檔案了,然後可以將其放入Web容器(如Tomcat)的相應目錄下(${Tomcata安裝目錄}\webapps)執行該web專案了。
相關文章
- ANT簡明教程[轉載]
- Ant Design 官方《Ant Design 實戰教程》釋出
- ant 簡述及build.xmlUIXML
- 簡單的ANT配置檔案
- JDK與ANTJDK
- ant Hello World
- Ant安裝
- ant:如何用ant將web project打包成war包WebProject
- Ant Design VueVue
- ANT安裝、配置
- Ant打包例項
- Ant Tips(1)
- ANT標籤詳解
- ant打包部署web工程Web
- ANT安裝、配置(轉)
- ant-design-vueVue
- jmeter+ant+jenkinsJMeterJenkins
- Maven和Ant簡介以及兩者的區別Maven
- Ant and Flex 用Ant編譯MXML檔案 - 螞蟻咬斷鬆緊帶(^_^)Flex編譯XML
- ant-ivy入門使用
- maven與ant的區別Maven
- 完善ANT的配置檔案
- Ant的Manifest任務
- Ant build.xml 詳解UIXML
- ANT task之Junit、JunitReport
- ANT命令總結(轉載)
- ant應該如何安裝
- 使用ant釋出系統
- ANT學習筆記 (轉)筆記
- ant程式設計資料--非常簡單入門詳細程式設計
- react + Ant Design + 支援 markdown 的 blog-react 專案文件說明React
- 1-ANT-安裝與配置
- Ant Design Amiya 釋出啦~???
- Ant1.8.2 Jdk7 DockerfileJDKDocker
- ant design pro入門(2)
- 【譯】Ant Design 3.0 駕到
- ant-design按需載入
- ant指令碼呼叫.bat檔案指令碼BAT