最近頻繁的作Web項目的部署,開發機是Windows系統,服務器在RedHat上,屢次使用SecureCRT工具後,決定直接使用Ant部署工具作這件事,同時遇到一個問題:Java程序程序中調用Ant API或者執行Ant 命令。java
本文算是對近來使用Ant的一些總結和問題記錄。web
1.Ant 是什麼?apache
Apache Ant是一個將軟件編譯、測試、部署等步驟聯繫在一塊兒加以自動化的一個工具,大多用於Java環境中的軟件開發。tomcat
2.Maven是什麼?服務器
Maven是基於項目對象模型(POM),經過必定的描述信息來管理項目。app
3.Ant vs Maven?eclipse
理解Ant和Maven的不一樣之處和各自的發展會有助於咱們作更好的選擇。webapp
Ant 和 Maven同屬於Aapche基金會下的項目,Maven是在借鑑Ant的優秀之處更上一層樓的面向軟件項目管理工具。
下面的Ant配置文件作一個Web項目的編譯,打包,部署,清理工做。
<?xml version="1.0" encoding="UTF-8"?> <project name="test" basedir="." default="makewar"> <!--部署目標路徑,須要根據實際狀況設置--> <property name="webapp" location="D:\__dev\apache-tomcat-6.0.37\webapps" /> <property name="warname" value="ROOT.war" /> <!-- 引用的外部Jar包,須要根據實際狀況設置 --> <property name="libs" location="\libs\bin" /> <property name="debuglevel" value="source,lines,vars" /> <!--eclipse是WebRoot,Myeclipse是WebContent,須要根據實際狀況設置--> <property name="webroot" value="${basedir}/WebContent" /> <property name="sources" value="${basedir}/src" /> <!--輸出內容路徑設置--> <property name="dest" value="${basedir}/dest" /> <property name="classes" value="${basedir}/build/classes" /> <path id="classpath" description="jar包路徑"> <fileset dir="${libs}"> <include name="*.jar" /> </fileset> </path> <target name="init" description="初始化構建目錄結構和拷貝文件"> <mkdir dir="${dest}" /> <mkdir dir="${classes}" /> <copy todir="${dest}"> <fileset dir="${webroot}"> <include name="WEB-INF/**" /> <include name="**" /> </fileset> </copy> <copy todir="${classes}" verbose="true"> <fileset dir="${sources}"> <include name="*.xml" /> <include name="*.Properties" /> <include name="*.properties" /> </fileset> </copy> <copy todir="${classes}/libs" verbose="true"> <fileset dir="${libs}"> <include name="*.jar"/> </fileset> </copy> </target> <target name="complie" depends="init" description="編譯"> <javac srcdir="${sources}" destdir="${classes}" encoding="utf-8" classpathref="classpath"> </javac> </target> <target name="makewar" depends="complie" description="打包部署"> <war warfile="${basedir}/${warname}" webxml="${dest}/WEB-INF/web.xml"> <lib dir="${libs}"> <include name="*.*" /> </lib> <classes dir="${classes}" /> <fileset dir="${dest}" /> </war> </target> <target name="clean" description="清理"> <delete dir="${dest}"> </delete> <delete dir="${classes}"> </delete> <delete file="${basedir}/${warname}" /> </target> <target name="move" description="部署war包到tomcat的webapp下"> <copy todir="${webapp}" file="${basedir}/${warname}" overwrite="yes"> </copy> </target> <target name="cleanweb" description="清理tomcat的webapp下的工程"> <delete dir="${webapp}/${ant.project.name}" includeemptydirs="true"> </delete> <delete file="${webapp}/${warname}"> </delete> </target> </project>
1.如何搭建Ant呢?
Ant是Apache基金會的項目,繼承這一向的命令模式,配置ANT_HOME,至於怎麼配置和JAVA_HOME配置同樣,網上好多時候要說配置CLASSPATH之類的路徑,其實在JDK1.6之後是不須要的。
命令行中:
>ant
Buildfile: build.xml does not exist!
Build failed
代表Ant環境搭建成功。
命令行中 : ant -help查看ant命令的詳細幫助信息。
2.關於Ant的build文件
Ant的build文件大體配置如左: 工程——>目標——>任務
從上面的配置信息中能夠看出,target中包含着delete,copy,war等任務。
3.關於Ant的build文件編寫
如何編寫build文件呢?project,target,task的各個屬性,都寫什麼內容呢?
一下N種途徑:
使用支持Ant的IDE,具備提示功能;(最經常使用)
使用Ant的Build文件的模版改動;(適合已經有成功部署能案例支持)
使用Ant的幫助文檔,Ant幫助文檔中給出了詳細的列表,Ant is written in Java.於是咱們在使用Ant提供的各類任務工具都離不開Java程序的支持,所以經過API能夠查看到各類任務須要的屬性等信息。(不斷挖掘Ant強大的工具能力)
4.關於Ant的任務
在Ant的幫助文檔中有一個List of Task和 Library Dependencies,前者提供了Ant爲咱們提供的任務集,後者對前者使用時應該具有的一些條件作描述,好比:要執行Ant的email任務,咱們知道Java發送郵件須要mail.jar的支持,因此在執行該任務的時候須要在運行環境中添加mail.jar包。
經過命令查看任務依賴環境:ant -diagnostics 將會有一個詳細的 Ant diagnostics report。
經過diagnostics報告信息能夠看出在個人機器上要運行scp任務的時候須要依賴:com.jcraft.jsch.Logger類,該類來自jsch.jar 0.1.50,注意不一樣的Ant版本可能對應的依賴jar版本不一樣,這時候就應該查詢用戶指南。
關於Ant任務的第三方依賴jar的相關信息獲取的方式,我的有個比較好的體驗先baidu,而後google這樣會很快解決問題,baidu提供了一些中文用戶的一些信息,google則提供英文信息更多些,瞭解一些因此然而後去官網查看或者源代碼庫纔不至於一頭霧水。
5.ant命令
ant的命令提供的各類執行build的參數,好比:-h(查看命令幫助), -version(查看Ant版本),-p(查看執行Build的工程信息),-lib(經過參數的放置添加依賴的jar路徑) 等
6.Ant工具學習
使用Ant工具來幫助咱們自動化的完成項目的編譯,打包,部署,經過用戶手冊和IDE的幫助這些任務能完成。至於學習Ant,經過我的體會,長時間不用了或者採用3中的模版方式來使用長此以往會使Ant在咱們心目中之能淪爲一個簡單的工具。
完成咱們開發工程須要上面的一些方式,途徑就能夠解決咱們的問題,幫助咱們完成工程的自動化構建。
經過了解AntAPI擴展Ant功能;
多嘗試一些不經常使用的命令或者參數;
多思考把Ant和Java開發緊密聯繫在一塊兒。