開發JavaEE項目經常會碰到修改代碼后,項目沒有重新編譯的問題。老大給指明了一個解決辦法:用ant編譯項目。
ant是apache基金會下的一個項目,是
基於Java語言的構建工具。
網上下載好ANT后,還需要配置相應的環境變量,跟java配置類似。系統變量中新建一個叫ANT_HOME的變量,值為ANT在本機的路徑。我的在F盤,就這樣設置:ANT_HOME(變量名) F:\\ANT;(變量值)。設置好后,打開DOS命令行,輸入:ANT,出現相應提示就說明配置成功。如果說不是內部或外部命令,就在用戶變量的PATH變量下,增加ANT的路徑地址。
配置好環境變量后,在java項目目錄下創建一個叫:build.xml文件,這是ANT的默認構建文件。
一個完整的build.xml包含以下標簽
:
1.<project>標簽 2.<target>標簽 3.<mkdir>標簽 4<jar>標簽 5.<javac標簽> 6.<java>標簽 7.<delete>標簽 8.<copy>標簽
還有property變量標簽和path路徑標簽。
<
property name=
"proj.home" value=
"."
/>
< property name= "proj.build" value= "${proj.home}/WebRoot/WEB-INF/classes" />
< property name= "proj.build" value= "${proj.home}/WebRoot/WEB-INF/classes" />
<property>標簽的作用是在build.xml文件中聲明一些常用的變量。比如上面第一個標簽中,用proj.home表示變量點".",變量的使用是通過:${變量名}表示值的。屬性標簽中可以嵌套屬性標簽,第二個標簽的值便是:"./WebRoot/WEB-INF/classes"
<path id=
"compile.classpath">
<fileset dir=
"./WebRoot/WEB-INF/lib"> <!
-
- 編譯java程序用到的第三方包所在的目錄
-
->
<include name=
"**/*.jar"
/>
<
/fileset>
<
/path>
<path>標簽保存的是某個文件夾的路徑。以上面代碼舉例,fileset dir意思設置指定的文件夾,include表示從這個文件夾獲取jar格式的文件。path標簽通過id屬性值使用。
< project name
=
"project"
default
=
"all" basedir
=
"."
>
<
/ project
>
1.<project>標簽是構建文件的根標簽。它可以有多個內在屬性,就如代碼中所示,其各個屬性的含義分別如下。
(1) default表示默認的運行目標,這個屬性是必須的。
(2) basedir表示項目的基准目錄。
(3) name表示項目名。
<
!
-- 把這個工程目錄下的WebRoot目錄生成 war文件
--
>
<target name
=
"war_test" depends
=
"compile"
>
<echo
>Building war file into
:${proj.war}
<
/echo
>
<mkdir dir
=
"${proj.dist}"
/
>
<delete file
=
"${proj.war}"
/
>
<jar destfile
=
"${proj.war}" encoding
=
"UTF-8"
>
<fileset dir
=
"${proj.srcdocroot}"
>
<exclude name
=
"**/lib/servlet-api.jar"
/
>
<exclude name
=
"**/lib/jsp-api.jar"
/
>
<
/fileset
>
<
/jar
>
<
/target
>
<target name
=
"deploy" depends
=
"war_test"
>
<copy file
=
"${proj.war}" tofile
=
"${tomcat.deployhome}/erp.war"
/
>
<
/target
>
2.<target>標簽
一個項目標簽下可以有一個或多個target標簽。Target的所有屬性如下。
(1).name表示標明,這個屬性是必須的。
(2).depends表示依賴的目標。
(3)if表示僅當屬性設置時才執行。
(4)unless表示當屬性沒有設置時才執行。
一個target標簽可以依賴其他的target標簽。
Ant的depends屬性指定了target的執行順序。Ant會依照depends屬性中target出現順序依次執行每個target。在執行之前,首先需要執行它所依賴的target。所以上面兩個targer執行的順序是war_test->deploy。
一個target只能被執行一次,即使有多個target依賴於它。如果沒有if或unless屬性,target總會被執行。
<mkdir dir=
"${proj.classbindir}"
/> <!
-
- 創建window文件夾,文件夾的名稱為 dir屬性值
-
->
3.<mkdir>標簽
該標簽用於創建一個目錄,它有一個屬性dir用來指定所創建的目錄名,
${proj.classbindir}在property標簽設置如下:
< property
name =
"proj.classbindir"
value =
"./WebRoot//WEB-INF/classes" / >
< jar destfile
=
"${proj.war}" encoding
=
"UTF-8"
>
< fileset dir
=
"${proj.srcdocroot}"
>
<
/ fileset
>
<
/ jar
>
4<jar>標簽
該標簽用來生成一個JAR文件,其屬性如下。
(1) destfile表示JAR文件名。
(2) basedir表示被歸檔的文件名。
(3) includes表示被歸檔的文件模式。
(4) exchudes表示被排除的文件模式。
<javac destdir
=
"${proj.classbindir}" debug
=
"yes" verbose
=
"no"
encoding
=
"UTF-8" source
=
"1.5" failonerror
=
"true" fork
=
"true"
memoryInitialSize
=
"64m" memoryMaximumSize
=
"256m" listfiles
=
"true"
>
<src path
=
"${proj.src}/main/java"
/
>
<
!
-- 編譯源代碼所在目錄 E
:\erp\src\main\java
--
>
<
include name
=
"**/*.java"
/
>
<
include name
=
"**/*.xml"
/
>
<classpath refid
=
"compile.classpath"
/
>
<
!
-- 編譯源代碼所用到的第三方包所在的目錄
--
>
<
/javac
>
5.<javac標簽>
該標簽用於編譯一個或一組java文件,其屬性如下。
(1).srcdir表示源程序的目錄。
(2).destdir表示
class文件的輸出目錄。
(3).include表示被編譯的文件的模式。
(4).excludes表示被排除的文件的模式。
(5).classpath表示所使用的類
路徑。
(6).debug表示包含的調試信息。
(7).optimize表示是否使用優化。
(8).verbose 表示提供詳細的輸出信息。
(9).fileonerror表示當碰到錯誤就自動停止。
6.<java>標簽
該標簽用來執行編譯生成的.
class文件,其屬性如下。
(1).classname 表示將執行的類名。
(2).jar表示包含該類的JAR文件名。
(3).classpath所表示用到的類路徑。
(4).fork表示在一個新的
虛擬機中運行該類。
(5).failonerror表示當出現錯誤時自動停止。
(6).output 表示輸出文件。
(7).append表示追加或者覆蓋默認文件。
< delete file
=
"${proj.war}"
/
>
7.<delete>標簽
該標簽用於刪除一個文件或一組文件,其屬性如下。
(1)/file表示要刪除的文件。
(2).dir表示要刪除的目錄。
(3).includeEmptyDirs 表示指定是否要刪除空目錄,默認值是刪除。
(4).failonerror 表示指定當碰到錯誤是否停止,默認值是自動停止。
(5).verbose表示指定是否列出所刪除的文件,默認值為不列出。
< copy file
=
"${proj.war}" tofile
=
"${tomcat.deployhome}/erp.war"
/
>
8.<copy>標簽
該標簽用於文件或文件集的拷貝,其屬性如下。
(1).file 表示
源文件。
(2).tofile 表示目標文件。
(3).todir 表示目標目錄。
(4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。
(5).includeEmptyDirs 表示制定是否拷貝空目錄,默認值為拷貝。
(6).failonerror 表示指定如目標沒有發現是否自動停止,默認值是停止。
(7).verbose 表示制定是否顯示詳細信息,默認值不顯示。
3.<mkdir>標簽 4<jar>標簽 5.<javac標簽> 6.<java>標簽 7.<delete>標簽 8.<copy>標簽只能寫在target標簽里面。
下面貼出一個簡單的build.xml配置。

這個build.xml里target執行順序是:根據第四個targerd的depends屬性,找到它依賴的target,然后再找上個target依賴的target,最后找到最基礎的那個target並執行它,這里也就是執行第一個target,它的作用是編譯java項目里的java類、xml文件及其他相關配置文件放到項目的WebRoot/WEB-INF/classes的文件夾里去。然后執行第二個targer,把編譯好的文件打包成一個war文件。第三步把war文件復制到tomcat的webapps目錄下去。就這樣,當我們啟動服務器的時候,服務器得到的都是我們最新的編譯后的代碼。