【圖文】 使用ant編譯和發布java項目


    開發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>標簽的作用是在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標簽。
例如,有一個target用於 編譯程序,另一個target用於生成 可執行文件。在生成 可執行文件之前必須先編譯該文件,因此可執行文件的target依賴於編譯程序的target。在上面代碼中,第一個target叫“war_test”,用來生成war文件。第二個terger作用是把生成war文件復制到Tomcat里,復制文件前需要事先存在該文件,所以第二個targer必須依賴第一個,depends屬性即為第一個targer的name屬性值。
  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目錄下去。就這樣,當我們啟動服務器的時候,服務器得到的都是我們最新的編譯后的代碼。
 
 
 
 
 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM