Ant使用指南

一,寫一個簡單的構建文件
Apache Ant的構建文件被寫成xml文件。每一個構建文件包含一個project(工程),和至少一個(默認的)target。Targets
包含task(任務)節點。每一個task(任務)節點可以有一個id屬性。下面介紹一下構建文件中的一些節點。
project:跟節點
    每個project可以有三個屬性
    name:不是必須的
    default:設置默認執行的target,不是必須的
    basedir:基本的目錄,其他所有的路徑計算問題的基礎。這個可以被basedir屬性(暫時不知道是哪裏的屬性)覆蓋。如果上述
            兩者都沒有設置,構建文件的父路徑將會被使用。不是必須的
    可選的:
        在project點下可以提供一個<description>節點
    每個工程下定義一個或多個targets(目標)。每個工程是你想要執行的tasks(任務)的集合。當開始ant,你可以選擇執行哪個target去執行。
    如果沒有指定任務,工程的默認屬性將會被用到。
targets:節點
    一個target可以依賴其他的targets(任務)。你可以用target來進行編譯。比如:一個target用來創建一個發行版本。
    當你編譯完成之後,你才能構建一個發行版本,所以這個發行版本的target(depends)依賴於編譯(target)。
    需要注意的是:ant的depands(依賴)屬性僅僅指定了執行的順序,它不影響是否目標會執行,如果依賴target目標沒有運行。
tasks
    一個task是一個段要執行的代碼。
    一個task可以有多個屬性(attribute)。這個屬性的值也可以包含一個屬性(property 下面介紹)。這個屬性在這個task執行的時候會被替換。
    Tasks(任務)的結構如下:
    <name attribute1="value1" attribute2="value2" ... />
    name就是你這個task的名字,attributeN就是屬性的名字,valueN就是對應的屬性的值。
    所有的任務共用一個name屬性,屬性的值被被ant自動生成的日誌信息中用到。
    Tasks(任務)可以有一個id屬性:
    <taskname id="taskID" ... />
    taskname是task(任務)的名字,taskID就是task(任務)非必要的標示符。你也可以在腳本中些task對象。比如:
    <script ... >
      task1.setFoo("bar");
    </script>
    用以上設置foo的屬性之。如果在java程序中,你可以接收到這個實例化對象通過 via project.getReference("task1").
properties
    屬性是一個重要的方法來定製一個構建過程或僅提供快捷鍵的字符串重複使用在一個構建文件。
    在其最簡單的形式屬性定義在構建文件(例如,屬性任務)或可能在外邊設置。
    一個屬性都有一個名稱和一個值;
    名稱是區分大小寫的。
    屬性可用於任務屬性的值或嵌套文本的任務。這個可以通過將屬性名之間“$ {”和“}”引用屬性值。
    例如,如果有一個“builddir”屬性值爲“build”,
    那麼這可能是用這個屬性,像這樣:$ { builddir } /classes。這是在運行時解析作爲 build/classes。
    隨着ant1.8的發展 property 有了更強的作用,而不只是作爲一個鍵值對存放。
例子:一個簡單的ant構建文件
<project name="MyProject" default="dist" basedir=".">
    <description>
        simple example build file
    </description>
  <!-- set global properties for this build 定義路徑的時候要使用location  不要使用 value ,
  因爲location會自動根據當前系統把路徑分隔符轉換成相應的格式(/\),而value只是存儲單純的字符串-->
  <property name="src" location="src"/>
  <property name="build" location="build"/>
  <property name="dist"  location="dist"/>

  <target name="init">
    <!-- Create the time stamp -->
    <tstamp/>
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="${build}"/>
  </target>

  <target name="compile" depends="init"
        description="compile the source " >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
  </target>

  <target name="dist" depends="compile"
        description="generate the distribution" >
    <!-- Create the distribution directory -->
    <mkdir dir="${dist}/lib"/>

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
    <jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
  </target>

  <target name="clean"
        description="clean up" >
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
  </target>
</project>
注意我們定義properties在任何target的外邊。

以上爲翻譯,以下爲筆記   
1,使用ant的標準
    生成是三個文件夾
        build:存放所有的文件信息
            src:存放源碼
            classes:存放編譯的classes文件
            dist:存放編譯生成的jar包
    使用ant編譯普通java項目的流程:
        1,創建上述四個文件夾
        2,將src文件夾的數據拷貝到build/src中
        3,編譯源代碼
        4,將源代碼打包爲jar
        5,直接運行程序
2,eclipse中配置ant
    一,選擇proferences--Ant可以配置Document URL配置文檔的路徑
    二,Ant-runtime--AntHome(默認是jdk的目錄)需要修改
    三,在工程根目錄中創建build.xml
    四,open with Ant editor 即可
3,下面介紹幾個任務
    <mkdir dir="build" />創建目錄
    <delete dir="build" />刪除目錄
    <fileset id="src.path" dir="src" includes="**/*.java"></fileset> 設置文件集
    另外一種定義方法
    <fileset id="src.path" dir="src">
        <include name="**/*.*" />
        <exclude name="**/*.perperties" />
    </fileset> 設置文件集
    <copy todir="build/src">
        <fileset dir="src" includes="**/*.*"></fileset>
        <!--也可以這樣寫-->
        <fileset refid="src.path"></fileset>
    </copy>
    <javac destdir="build/classes" srcdir="src" />制定javac編譯命令,試用destdir指定目的目錄,srcdir制定源碼目錄
    打包
    <jar destfile="build/dist/hello.jar" basedir="build/classes"></jar>
    在包中存在META-INF文件夾,在文件夾中有MAINFEST.MF文件,可以制定mainclass,執行運行的class
    執行Main-Class
    <jar destfile="build/dist/hello.jar" basedir="build/classes">
        <mainfest>
            <attribute name="Main-Class" value="ant.xxxxx.xxx.HelloWorld" />
            <attribute name="Build-By" value="kenan" />
        <mainfest>
    </jar>
    <echo>hello</echo>直接輸出字符串
    運行java文件:基於類路徑執行
    <java classname="xxxxx.HelloWorld" classpath="build/classes">
        <arg value="張三" />
        <arg value="李四" />
        <arg value="王五" />
    </java>
    運行java文件:基於jar文件,fork=true設置使用jdk的編譯環境
    <java jar="build/dist/hello.jar" fork="true">
        <arg value="張三" />
        <arg value="李四" />
        <arg value="王五" />
    </java>
    定義屬性
    <property name="build.dir" location="build"></property>
    <property name="build.classes" location="build/classes"></property>
    <property name="build.lib" location="build/dist"></property>
    <property name="build.src" location="build/src"></property>
    使用的時候
    ${build.dir}
   
    也可以把屬性放在properties文件中定義
    pro.properties
    build.dir = build
    <property file="pro.perties"></property>
    通過以上標籤引入屬性文件中的鍵值對
    ant中屬性(算是系統屬性,可以直接引用)
    ant.file 構建文件的絕對路徑
    ant.home ant的home路徑
    ant.java.version ant檢測到的jvm的版本
    ant.version ant的版本號
    basedir 項目基目錄的絕對路徑
    導入系統環境變量到env這個變量中
    <property environment="env" ></property>
    ${env.JAVA_HOME}...引用

  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章