【ANT】ant使用

  

  官網:https://ant.apache.org/,task介紹:https://ant.apache.org/manual/index.htmlhtml

0.介紹:

  Ant的構建文件當開始一個新的項目時,首先應該編寫Ant構建文件。構建文件定義了構建過程,並被團隊開發中每一個人使用。Ant構建文件默認命名爲build.xml,也能夠取其餘的名字。只不過在運行的時候把這個命名看成參數傳給Ant。構建文件能夠放在任何的位置。通常作法是放在項目頂層目錄中,這樣能夠保持項目的簡潔和清晰。下面是一個典型的項目層次結構。 
(1) src存放文件。 
(2) class存放編譯後的文件。 
(3) lib存放第三方JAR包。 
(4) dist存放打包,發佈之後的代碼。 
  Ant構建文件是XML文件。每一個構建文件定義一個惟一的項目(Project元素)。每一個項目下能夠定義不少目標(target元素),這些目標之間能夠有依賴關係。當執行這類目標時,須要執行他們所依賴的目標。每一個目標中能夠定義多個任務,目標中還定義了所要執行的任務序列。Ant在構建目標時必須調用所定義的任務。任務定義了Ant實際執行的命令。Ant中的任務能夠爲3類。 
(1) 核心任務。核心任務是Ant自帶的任務。 
(2) 可選任務。可選任務實來自第三方的任務,所以須要一個附加的JAR文件。 
(3) 用戶自定義的任務。用戶自定義的任務實用戶本身開發的任務。
java

 

  說白了,ANT就是經過XML執行一些任務,能夠簡化操做,好比:編譯Java,執行Java命令,打Jar包,打War包等操做。接下來會慢慢研究這些操做。git

1.ant安裝

 1.1  下載解壓便可。以下:

 

1.2  配置環境變量(環境變量,無非就是讓path變量中能夠找到ant\bin目錄的bat和cmd文件,隨意配置,下面是我喜歡的配置方式)

 

 

 

 

 1.3    運行測試ANT

ant -help    查看幫助信息便可web

C:\Users\XXX\Desktop\antProject>ant -help
ant [options] [target [target2 [target3] ...]]
Options:
  -help, -h              print this message and exit
  -projecthelp, -p       print project help information and exit
  -version               print the version information and exit
  -diagnostics           print information that might be helpful to
                         diagnose or report problems and exit
  -quiet, -q             be extra quiet
  -silent, -S            print nothing but task outputs and build failures
  -verbose, -v           be extra verbose
  -debug, -d             print debugging information
  -emacs, -e             produce logging information without adornments
  -lib <path>            specifies a path to search for jars and classes
  -logfile <file>        use given file for log
    -l     <file>                ''
  -logger <classname>    the class which is to perform logging
  -listener <classname>  add an instance of class as a project listener
  -noinput               do not allow interactive input
  -buildfile <file>      use given buildfile
    -file    <file>              ''
    -f       <file>              ''
  -D<property>=<value>   use value for given property
  -keep-going, -k        execute all targets that do not depend
                         on failed target(s)
  -propertyfile <name>   load all properties from file with -D
                         properties taking precedence
  -inputhandler <class>  the class which will handle input requests
  -find <file>           (s)earch for buildfile towards the root of
    -s  <file>           the filesystem and use it
  -nice  number          A niceness value for the main thread:
the default
  -nouserlib             Run ant without using the jar files from
  -noclasspath           Run ant without using CLASSPATH
  -autoproxy             Java1.5+: use the OS proxy settings
  -main <class>          override Ant's normal entry point

 

 

1.4使用ANT打印簡單的信息

一個簡單的build.xmlapache

<project name="HelloWorld" default="test" basedir="">
  <target name="test">
    <echo message="Hello, world"/>
    <echo message="This is info message." level="info" />
  </target>
</project>

 

 

運行上面的build.xml:(直接ant就能夠了)api

C:\Users\liqiang\Desktop\antProject>ls
build.xml

C:\Users\liqiang\Desktop\antProject>ant
Buildfile: C:\Users\liqiang\Desktop\antProject\build.xml

test:
     [echo] Hello, world
     [echo] This is info message.

BUILD SUCCESSFUL
Total time: 1 second

 

1.5若是xml文件的名字不是build.xml能夠用-buildfile指定文件的名稱

  例如:文件的名字是buildXX.xmltomcat

C:\Users\liqiang\Desktop\antProject>ls
buildXX.xml

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

test:
     [echo] Hello, world
     [echo] This is info message.

BUILD SUCCESSFUL
Total time: 2 seconds

 

 

2.ant常見標籤的使用(其實常見的標籤就是task)

  其實查看標籤有什麼屬性,去task官網查看該task有什麼屬性即該標籤有什麼屬性。下面只是介紹部分標籤以及其重要屬性,更全的標籤參考官網   :https://ant.apache.org/manual-1.9.x/index.htmlapp

1.<project>標籤 

每一個構建文件對應一個項目。<project>標籤時構建文件的根標籤。它能夠有多個內在屬性,就如代碼中所示,其各個屬性的含義分別以下。 
(1) default表示默認的運行目標,這個屬性是必須的。 
(2) basedir表示項目的基準目錄。 
(3) name表示項目名。 
(4) description表示項目的描述。 
每一個構建文件都對應於一個項目,可是大型項目常常包含大量的子項目,每個子項目均可以有本身的構建文件。 less

 

2.<target>標籤 

  一個項目標籤下能夠有一個或多個target標籤。一個target標籤能夠依賴其餘的target標籤。例如,有一個target用於編譯程序,另外一個target用於聲稱可執行文件。在生成可執行文件以前必須先編譯該文件,所以可執行文件的target依賴於編譯程序的target。Target的全部屬性以下。 
(1) name表示標明,這個屬性是必須的。 
(2) depends表示依賴的目標。 
(3) if表示僅當屬性設置時才執行。 
(4) unless表示當屬性沒有設置時才執行。 
(5) description表示項目的描述。 
Ant的depends屬性指定了target的執行順序。Ant會依照depends屬性中target出現順序依次執行每一個target。在執行以前,首先須要執行它所依賴的targeteclipse

 

3.ehco標籤:最簡單的打印信息的標籤

message:須要打印的信息,能夠用${}取變量

file:將message寫入到文件中

append:是否已追加模式寫入文件

level:級別,相似於日誌級別(在開發工具中不能級別顯示的信息不一樣)

encoding:使用的編碼格式

force:是否強制寫入到一個只讀的文件中

例如:

<project name="HelloWorld" default="" basedir="">   
    <echo file="test.log" message="測試1" level="debug" append="true" encoding="utf-8"/>
    <echo file="test.log" message="測試2" level="info" append="true" encoding="utf-8"/>
    <echo file="test.log" message="測試3" level="warning" append="true" encoding="utf-8"/>
    <echo file="test.log" message="測試4" level="error" append="true" encoding="utf-8"/>
</project>

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

BUILD SUCCESSFUL
Total time: 1 second

C:\Users\liqiang\Desktop\antProject>cat ./test.log
測試1測試2測試3測試4

 

 

4.<mkdir>標籤  

 該標籤用於建立一個目錄,它有一個屬性dir用來指定所建立的目錄名,以下:

<project name="HelloWorld" default="test" basedir="">
  <target name="test">
    <mkdir dir = "tttt"/>
  </target>
</project>

 

或者:

<project name="HelloWorld" default="" basedir="">
    <mkdir dir = "tttt"/>
</project>

 

 

 

執行上面腳本:

C:\Users\liqiang\Desktop\antProject>ls
buildXX.xml

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

test:
    [mkdir] Created dir: C:\Users\liqiang\Desktop\antProject\tttt

BUILD SUCCESSFUL
Total time: 1 second

C:\Users\liqiang\Desktop\antProject>ls
buildXX.xml  tttt

 

 

5.<delete>標籤 

該標籤用於刪除一個文件或一組文件,屬性以下: 

(1).file表示要刪除的文件。 
(2).dir表示要刪除的目錄。 
(3).includeEmptyDirs 表示指定是否要刪除空目錄,默認值是刪除。 
(4).failonerror 表示指定當碰到錯誤是否中止,默認值是自動中止。 
(5).verbose表示指定是否列出所刪除的文件,默認值爲不列出。

 

例如刪除一個文件夾:

<project name="HelloWorld" default="" basedir="">
    <delete dir="ttt"/>
</project>

 

 

6.<copy>標籤 (重要)

該標籤用於文件或文件集的拷貝,其屬性以下。 
(1).file 表示源文件。 
(2).tofile 表示目標文件。 
(3).todir 表示目標目錄。 
(4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。 
(5).includeEmptyDirs 表示制定是否拷貝空目錄,默認值爲拷貝。 
(6).failonerror 表示指定如目標沒有發現是否自動中止,默認值是中止。 
(7).verbose 表示制定是否顯示詳細信息,默認值不顯示。

例如:複製文件

<project name="HelloWorld" default="" basedir="">
    <copy file="buildXX.xml" tofile="./build.xml"/>
</project>

 

批量複製的腳本:

        <copy todir="${basedir}/dist/examBuildClass">
            <fileset dir="${basedir}/src">
                <include name="**/**.xml" />
            </fileset>
        </copy>

 

  <include name="**/**.xml" />是包含本目錄以及子目錄的xml文件

 <include name="**.xml" />是本目錄的xml文件,不包含子目錄

 

 

7.copyfile\copydir複製文件或者目錄

  兩個標籤都有最基本的屬性:src和dest表示源文件和目的文件

<project name="HelloWorld" default="" basedir="">
    <copyfile src="buildXX.xml" dest="./build.xml"/>
</project>

8.Javac編譯Java文件

該標籤用於編譯一個或一組java文件,其屬性以下: 
(1).srcdir表示源程序的目錄。 
(2).destdir表示class文件的輸出目錄。 
(3).include表示被編譯的文件的模式。 
(4).excludes表示被排除的文件的模式。 
(5).classpath表示所使用的類路徑。 
(6).debug表示包含的調試信息。 
(7).optimize表示是否使用優化。 
(8).verbose 表示提供詳細的輸出信息。 
(9).fileonerror表示當碰到錯誤就自動中止。

例如:編譯本目錄下的一個java文件

public class Test {

    public Test() {
    }
    public static void main(String[] args) {
        System.out.print("1");
    }

}

 

 

編譯腳本

<project name="HelloWorld" default="" basedir="">
      <javac srcdir="./"
         destdir="./"
         fork="true"
         source="1.2"
         target="1.2"
  />
</project>

 

 

測試:

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
    [javac] C:\Users\liqiang\Desktop\antProject\buildXX.xml:7: warning: 'include
uild.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 1 source file to C:\Users\liqiang\Desktop\antProject
    [javac] 警告: [options] 未與 -source 1.3 一塊兒設置引導類路徑
    [javac] 警告: [options] 源值1.3已過期, 將在將來全部發行版中刪除
    [javac] 警告: [options] 目標值1.2已過期, 將在將來全部發行版中刪除
    [javac] 警告: [options] 要隱藏有關已過期選項的警告, 請使用 -Xlint:-options。
    [javac] 4 個警告

BUILD SUCCESSFUL
Total time: 6 seconds

C:\Users\liqiang\Desktop\antProject>javap -c -v Test.class | grep major
  major version: 46

 

 

9.Java運行class文件

該標籤用來執行編譯生成的.class文件,其屬性以下。 
(1).classname 表示將執行的類名。 
(2).jar表示包含該類的JAR文件名。 
(3).classpath所表示用到的類路徑。 
(4).fork表示在一個新的虛擬機中運行該類。 
(5).failonerror表示當出現錯誤時自動中止。 
(6).output 表示輸出文件。 
(7).append表示追加或者覆蓋默認文件。

例如運行上面的class文件:(必須指定classpath包含當前路徑)

<project name="HelloWorld" default="" basedir="">
     <java  classname="Test" classpath="./;${classpath}">
     </java>
</project>

 

補充:此標籤也能運行Jar文件,相似於java -jar命令:

 例如,運行下面9打的jar包(必須制定fork參數,maxmemory制定JVM大小)

<project name="HelloWorld" default="" basedir="">
       <java jar="app.jar" fork="true"   failonerror="true"
           maxmemory="128m"/>
</project>

 

 

10.jar打包

該標籤用來生成一個JAR文件,其屬性以下。 
(1) destfile表示JAR文件名。 
(2) basedir表示被歸檔的文件名。 
(3) includes表示別歸檔的文件模式。 
(4) exchudes表示被排除的文件模式。

例如打包上面的class文件:(下面命令會生成主菜單清單,也就是生成MANIFEST.MF,而且寫入主函數入口,能夠經過java -jar運行)

<project name="HelloWorld" default="" basedir="">
       <jar destfile="./app.jar" basedir="./" includes="**/*.class" excludes="**/Test11111111111.class" >
             <manifest>
              <attribute name="Main-Class" value="Test"/>
            </manifest>
          </jar>
</project>

 

 

結果:

 

 

11  war打war包的命令

   關於此task在weblogic編譯JSP的時候就研究過,參考:http://www.javashuo.com/article/p-aygnbvzp-cv.html

 

 12.  zip/unzip 壓縮與解壓縮

 zip用於壓縮,打zip包,以下:

<project name="HelloWorld" default="" basedir="">
         <zip destfile="./manual.zip" basedir="./"/>
</project>

 

結果:

 

unzip用於解壓縮

<project name="HelloWorld" default="" basedir="">
         <zip destfile="./manual.zip" basedir="./"/>
</project>

 

13.   loadfile 讀取文件內容,LoadProperties讀取properties文件內容,loadresource能夠用於獲取某個URL的源碼

13.1  loadfile讀取文件內容

  有時候咱們但願讀取一個的內容到某個屬性中,例如:

<project name="HelloWorld" default="" basedir="">
    <loadfile property="test" srcFile="./buildXX.xml" encoding="GBK"/>
    <echo message="${test}"/>
</project>

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
     [echo] <project name="HelloWorld" default="" basedir="">
     [echo]     <loadfile property="test" srcFile="./buildXX.xml" encoding="GBK"/>
     [echo]     <echo message="${test}"/>
     [echo] </project>

BUILD SUCCESSFUL
Total time: 2 seconds

13.2    LoadProperties讀取properties文件內容 

loadproperties標籤,會加載properties文件中的內容爲本文件的properties變量,經過${varname}能夠獲取變量的值,例如:

<project name="HelloWorld" default="" basedir="">
    <loadproperties srcFile="log4j.properties"/>
    <echo message="${log4j.rootLogger}"/>
</project>

 

結果:

C:\Users\liqiang\Desktop\antProject>cat log4j.properties | grep rootLo
log4j.rootLogger=debug, stdout

C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
     [echo] debug, stdout

BUILD SUCCESSFUL
Total time: 2 seconds

13.3  loadresource能夠用於獲取某個URL的源碼

  例如:獲取某個http的源碼。property是讀取回來的property的變量,encoding指定解析的編碼。

<project name="HelloWorld" default="" basedir="">
    <loadresource property="indexresource" encoding="utf-8">
          <url url="http://qiaoliqiang.cn/"/>
    </loadresource>
    <echo message="${indexresource}"/>
</project>

 

 

14. replace 替換文件中的內容

  例如,一個txt文件中的原來的內容爲123,咱們用ant腳本將1換爲3

<project name="HelloWorld" default="" basedir="">
    <replace file="./1.txt" token="1" value="3"/>
</project>

結果:

C:\Users\liqiang\Desktop\antProject>cat 1.txt
123
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

BUILD SUCCESSFUL
Total time: 3 seconds

C:\Users\liqiang\Desktop\antProject>cat 1.txt
323

 

 

 

補充:學習了讀取文件與替換文件,咱們就能夠用ant腳本寫一個文件的內容替換另外一個文件的指定內容

例如 1.txt內容是"321"      2.txt內容是"123 456" ,咱們的需求是將2.txt中的123替換爲1.txt中的內容。腳本以下:

<project name="HelloWorld" default="" basedir="">
    <loadfile property="test" srcFile="./1.txt" encoding="GBK"/>
    <replace file="./2.txt" token="123" value="${test}"/>
</project>

 

結果:

C:\Users\liqiang\Desktop\antProject>cat 1.txt
321
C:\Users\liqiang\Desktop\antProject>cat 2.txt
123 456
C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

BUILD SUCCESSFUL
Total time: 3 seconds

C:\Users\liqiang\Desktop\antProject>cat 2.txt
321 456

 

15.  Property定義變量

  設置一個本地變量, 能夠經過${}屢次調用。

<project name="HelloWorld" default="" basedir="">
    <property name="var1" value="dist"/>
    <echo message="${var1}"/>
</project>

 

補充:其file屬性也能夠引入另外一個properties文件,此種方式相似於咱們項目中使用properties文件:

ant.properties

name=username
password=userpassword

 

 build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="test" basedir="">
    <property file="ant.properties"></property>
    <target name="test">
        <echo message="${name}" />
        <echo message="${password}" level="info" />
    </target>
</project>

 

 結果:

Buildfile: E:\xiangmu\MavenProject\build.xml
test:
     [echo] username
     [echo] userpassword
BUILD SUCCESSFUL
Total time: 1 second

 

 

16. Import 引進另外一個build.xml到當前project(合併多個build.xml)

  import用於合併多個build.xml,能夠簡單理解爲將另外一個xml中project中的內容引入當前xml的project中。兩個xml的project的name不能相同。

例如:buildXX.xml

<project name="HelloWorld" default="default" basedir="">
    <import file="./buildXX1.xml"/>
    <target name="default" depends="t1">
        <antcall target="t1"></antcall>
    </target>
</project>

 

 

buildXX1.xml

<project name="HelloWorld1" default="" basedir="">
    <property name="var1" value="dist"/>
    <target name="t1">
        <echo message="${var1}"/>
    </target>
</project>

 

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

t1:
     [echo] dist

default:

t1:
     [echo] dist

 

 

17.   AntCall 在target中的任意位置調用其餘target(antcall不能做爲頂級節點,也就是必須嵌入到target中)

  有時咱們在指定位置但願調用其餘target,target的depends屬性會在執行本target前就執行另外一個target,antcall能夠在指定位置調用另外一個target

<project name="HelloWorld" default="t3" basedir="">
    <target name="t1">
        <echo message="=====1===="/>
    </target>
    
    <target name="t2">
        <echo message="=====2===="/>
    </target>

    <target name="t3" depends="t1">
        <echo message="=====3===="/>
        <antcall target="t2"/>
    </target>
</project>

 

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml

t1:
     [echo] =====1====

t3:
     [echo] =====3====

t2:
     [echo] =====2====

BUILD SUCCESSFUL
Total time: 1 second

 

18.Concat合併多個文件 

目錄結構:

 

 

原來文件內容:

exam.1.txt   

111

exam.2.txt

222

exam.3txt

333

exam.txt

444

 

 

(1)簡單的合併文件,將文件內容合併到文件中:(是以覆蓋的方式進行合併)

<project name="exam" default="default" basedir=".">
    <!-- import properties file-->
    <echo message="basedir = ${basedir}"/>

    <target name="default">
        <concat destfile="${basedir}/exam.txt">Hello, World!</concat>
    </target>
</project>

 

 控制檯:

Buildfile: E:\xiangmu\Exam\build.xml
[echo] basedir = E:\xiangmu\Exam
default:
BUILD SUCCESSFUL
Total time: 314 milliseconds

 

查看exam.txt:

Hello, World!

 

(2)簡單的合併文件,將文件內容合併到文件中:(以追加的方式進行合併-----append屬性)

<project name="exam" default="default" basedir=".">
    <!-- import properties file-->
    <echo message="basedir = ${basedir}"/>

    <target name="default">
        <concat destfile="${basedir}/exam.txt" append="true">Hello, World!</concat>
    </target>
</project>

 

 查看exam.txt:

Hello, World!Hello, World!

 

(3)合併多個文件,以覆蓋的方式進行合併

<project name="exam" default="default" basedir=".">
    <!-- import properties file-->
    <echo message="basedir = ${basedir}" />

    <target name="default">
        <concat destfile="${basedir}/exam.txt">
            <filelist dir="${basedir}" files="exam.1.txt,exam.2.txt" />
            <fileset dir="${basedir}" includes="exam.*.txt" excludes="exam.txt" />
        </concat>
    </target>

</project>

 

 

 查看exam.txt:

111222111222333

 

追加只用append=true

 

 

19.  taskdef自定義task的用法:(自定義task實際就是本身編寫java程序而後編譯以後自定義標籤)

  前提是自定義的task的類要有public xxx execute()方法,例如:

public class Test {

    public Test() {
    }
    public void execute(){
        System.out.println("11111111");
    }

}

 

編譯以後生成成class文件:

 

編寫自定義task並調用的腳本:

<project name="HelloWorld" default="test" basedir="">
     <taskdef name="mytask" classpath="./" classname="Test"/>
    <mytask/>

    <echo message="======================"/>

    <target name="test">
            <mytask/>
    </target>
</project>

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile ./buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
   [mytask] 11111111
     [echo] ======================

test:
   [mytask] 11111111

BUILD SUCCESSFUL
Total time: 1 second

 

 3.ant常見的數據類型

在構建文件中爲了標識文件或文件組,常常須要使用數據類型。數據類型包含在    org.apache.tool.ant.types    包中。其實查看這些標籤有哪些屬性能夠查看官網:http://ant.apache.org/manual-1.9.x/api/

下面簡單介紹構建文件中一些經常使用的數據類型。 

1. argument 類型 (傳遞參數經常使用)

由Ant構建文件調用的程序,能夠經過<arg>元素向其傳遞命令行參數,如apply,exec和java任務都可接受嵌套<arg>元素,能夠爲各自的過程調用指定參數。如下是<arg>的全部屬性。 
(1)value 是一個命令參數。若是參數中有空格,但又想將它做爲單獨一個值,則使用此屬性。 
(2)file表示一個參數的文件名。在構建文件中,此文件名相對於當前的工做目錄。 
(3)line表示用空格分隔的多個參數列表。 
(4)path表示路徑。 

例如:對於以下一段程序:

public class Mytest {
    public static void main(String[] args) {
        for(String s:args){
            System.out.println(s);
        }
    }
}

 

 

咱們能夠經過line傳遞參數:(空格分隔的多個參數列表)

<project name="HelloWorld" default="" basedir="">
    <java  classname="Mytest" classpath="./;${classpath}">
        <arg line="1 2 3 '4'"/>
     </java>
</project>

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
     [java] 1
     [java] 2
     [java] 3
     [java] 4

BUILD SUCCESSFUL
Total time: 1 second

 

 

咱們也能夠用value傳遞單個參數,會當作一個字符串元素處理:

<project name="HelloWorld" default="" basedir="">
    <java  classname="Mytest" classpath="./;${classpath}">
        <arg value="1 2 3 '4'"/>
     </java>
</project>

 

 

結果:

C:\Users\liqiang\Desktop\antProject>ant -buildfile buildXX.xml
Buildfile: C:\Users\liqiang\Desktop\antProject\buildXX.xml
     [java] 1 2 3 '4'

BUILD SUCCESSFUL
Total time: 2 seconds

 

 

2.Path類型  (定義一個path路徑,在其餘標籤經過classpathref引入對應ID便可)

Path元素用來表示一個類路徑,不過它還能夠用於表示其餘的路徑。在用做揖個屬性時,路經中的各項用分號或冒號隔開。在構建的時候,此分隔符將代替當前平臺中全部的路徑分隔符,其擁有的屬性以下。 
(1).location 表示一個文件或目錄。Ant在內部將此擴展爲一個絕對路徑。 
(2).refid 是對當前構建文件中某處定義的一個path的引用。 
(3).path表示一個文件或路徑名列表。

例如:(經過下面方法定義path路徑,並在classpathref引入path的id便可)

<project name="HelloWorld" default="" basedir="">
    <path id="myclass.classpath" path="./"></path>

    <java  classname="Mytest" classpathref="myclass.classpath" fork="true">
        <arg value="1 2 3 '4'"/>
     </java>

</project>

 

與上面等價功能的XML以下:

<project name="HelloWorld" default="" basedir="">
    <path id="myclass.classpath" location="./"></path>

    <java  classname="Mytest" classpathref="myclass.classpath" fork="true">
        <arg value="1 2 3 '4'"/>
     </java>

</project>

 

 

<project name="HelloWorld" default="" basedir="">
    
    <path id="myclass.classpath" location="./"></path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
     </java>

</project>

 

 

 

3.filelist類型---FileList表示文件的顯式命名列表。當您想要捕獲文件列表時,不管文件當前是否存在,FileList都是有用的。filelist 指出的文件有多是不存在的。(files屬性能用*匹配)

 (1).dir是用於計算絕對文件名的目錄。 
(2).files 是用逗號分隔的文件名列表。 (若是是class文件不用寫後綴,其餘文件須要後綴,支持*通配符匹配)
(3).refid 是對某處定義的一個<filelist>的引用。 
注意  dir 和 files 都是必要的,除非指定了refid(這種狀況下,dir和files都不容許使用)。

 

例如:(filelist中通配符要用*,好像不支持xx*,或者*.xxx的用法,另外files引入class文件的時候不能寫後綴.class,只能寫文件名字)

<project name="HelloWorld" default="" basedir="">   
    <filelist id="filelist1" dir="C:/Users/liqiang/Desktop" files="*"></filelist>    

    <path id="myclass.classpath">
        <filelist refid="filelist1"></filelist>    
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

與之等價的XML:

<project name="HelloWorld" default="" basedir="">   
    <filelist id="filelist1" dir="C:/Users/liqiang/Desktop" files="Mytest"></filelist>    

    <path id="myclass.classpath">
        <filelist refid="filelist1"></filelist>    
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

 

若是是jar文件須要寫文件後綴

<project name="HelloWorld" default="" basedir="">   
    <filelist id="filelist1" dir="C:/Users/liqiang/Desktop/antProject" files="tt.jar"></filelist>    

    <path id="myclass.classpath">
        <filelist refid="filelist1"></filelist>    
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

 

4.fileset類型---引入的文件必須存在,不然會報錯(並且 includesfile 屬性不能用*匹配,引入全部文件都須要後綴)

Fileset 數據類型定義了一組文件,並一般表示爲<fileset>元素。不過,許多ant任務構建成了隱式的fileset,這說明他們支持全部的fileset屬性和嵌套元素。如下爲fileset 的屬性列表。 
(1).dir表示fileset 的基目錄。 
(2).casesensitive的值若是爲false,那麼匹配文件名時,fileset不是區分大小寫的,其默認值爲true。 
(3).defaultexcludes 用來肯定是否使用默認的排除模式,默認爲true。 
(4).excludes 是用逗號分隔的須要派出的文件模式列表。 
(5).excludesfile 表示每行包含一個排除模式的文件的文件名。 
(6).includes 是用逗號分隔的,須要包含的文件模式列表。 
(7).includesfile 表示每行包括一個包含模式的文件名。 

 

例如:引入class文件

<project name="HelloWorld" default="" basedir="">   
    <fileset id="fileset1" dir="./">
        <include name="Mytest" />
    </fileset>

    <path id="myclass.classpath">
        <fileset refid="fileset1"></fileset>    
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

與之等價的腳本:

<project name="HelloWorld" default="" basedir="">   
    <fileset id="fileset1" dir="./" includesfile="Mytest.class"></fileset>

    <path id="myclass.classpath">
        <fileset refid="fileset1"></fileset>    
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

 

 

5.dirset    使用該類型的元素會直接定位到某個目錄並引入相應文件,經常使用的屬性:

  id:定義惟一的ID

  refid:引用其餘的dirset的id

  dir:表示目錄的位置

例如:(下面定義了dirset與path,用經過refid引入了其餘dirset與path)

<project name="HelloWorld" default="" basedir="">   
    <dirset id="basedirset" dir="./"></dirset>

    <path id="myclass.classpath">
        <dirset refid="basedirset"></dirset>
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

 

例以下面腳本將桌面的class文件包含到   basedirset  中:

<project name="HelloWorld" default="" basedir="">   
    <dirset id="basedirset" dir="C:/Users/liqiang/Desktop/">
        <include name="*.class"/>
    </dirset>

    <path id="myclass.classpath">
        <dirset refid="basedirset"></dirset>
    </path>
    <path id="myclass.classpath1" refid="myclass.classpath"></path>

    <java  classname="Mytest" classpathref="myclass.classpath1" fork="true">
        <arg value="1 2 3 '4'"/>
    </java>

</project>

 

 

 

4.ant在eclipse中的使用:

  任何工具都會集成到開發工具中,像SVN,maven,git都與eclipse集成,固然ant也不例外。下面會在eclipse中使用ant。

通常版本直接集成了ant,因此直接使用便可。

1.新建一antfiles(也就是新建一個build.xml)

工程結構以下:

 

 

 輸入如下腳本進行測試:

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="test" basedir="">
  <target name="test">
    <echo message="Hello, world"/>
    <echo message="This is info message." level="info" />
  </target>
</project>

 

 

2. 直接右鍵 run as -> ant build便可,結果以下:

Buildfile: E:\xiangmu\MavenProject\build.xml
test:
     [echo] Hello, world
     [echo] This is info message.
BUILD SUCCESSFUL
Total time: 1 second

 

 

 

3.新建一properties文件而且在build.xml中引入該properties文件進行測試:

ant.properties

name=username
password=userpassword

 

 

build.xml腳本:

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" default="test" basedir="">
    <property file="ant.properties"></property>
    <target name="test">
        <echo message="${name}" />
        <echo message="${password}" level="info" />
    </target>
</project>

 

 

結果:

Buildfile: E:\xiangmu\MavenProject\build.xml
test:
     [echo] username
     [echo] userpassword
BUILD SUCCESSFUL
Total time: 1 second

 

 

4.在eclipse中相似於運行tomcat 的server同樣運行ant

(1)打包ant視圖: window->show view 

 

 

 

 

(2)空白處右擊而後add buildfiles

 

 

(3)選中咱們的build.xml

 

(4)直接雙擊test運行該target便可。

 

5.eclipse中配置ant的環境

 

 能夠設置須要執行的target以及JRE等參數:(能夠選擇多個target進行執行)

 

 

上面配置至關於設置了快捷方式,運行的時候點擊下面便可:(至關於運行指定build.xml的默認target)

 

 

 

  

 5.ant常見問題:

1.ant也有編譯的JRE版本,在編譯JDK8的時候因爲ant使用JDK7搞死我了--:

eclipse選中如圖位置:External xxx....

 

配置ant的jre版本:

 

2:若是有錯誤而且ant日誌亂碼,解決辦法以下:

  在運行時修改ant 的運行時輸出編碼,咱們添加(<sysproperty key="file.encoding" value="UTF-8" />) 後,控制檯就能夠正常顯示中文了,以下:

    <!-- ================================= 
    target: precompile 
    ================================= -->
    <target name="precompile" description="--> description">
        <!--compile JSP-->
        <java classname="weblogic.jspc" classpathref="wls.classpath" fork="true" failonerror="yes" maxmemory="1028m">
            <sysproperty key="file.encoding" value="utf-8"/>
            <arg line="-advanced" />
        </java>
    </target>

 

 

 

3.若是咱們但願在編譯的classpath中引入某個目錄下的class文件做爲classpath,辦法以下dirset就是將與build.xml同級的build\classes目錄引入classpath(通常eclipse編譯後文件在這個目錄):

<path id="wls.classpath">
        <fileset dir="${wls_home}/server/lib">
            <include name="*.jar" />
        </fileset>
        <dirset dir="./build/classes">
        </dirset>
    </path>

上面dirset等同於下面配置:(fileset能夠jar能夠class)

            <fileset dir="E:/xiangmu/WebTest/WebContent/WEB-INF/classes"
                includes="*.class">
            </fileset>

 

 

 

補充:build.xml中basedir能夠定義一個全局的位置變量,.表明當前位置,例如

<project name="exam" default="default" basedir=".">
    <target name="default">
        <echo message="${basedir}"/>
    </target>
</project>

 

結果:

Buildfile: E:\xiangmu\Exam\build.xml
default:
[echo] E:\xiangmu\Exam
BUILD SUCCESSFUL
Total time: 358 milliseconds

 

 

補充:好像ant1.10.5須要JDK8支持,而ant1.9.13支持JDK7

相關文章
相關標籤/搜索