<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    Ant全攻略

    轉自: BEA 論壇 powerise ?
    1.Ant
    是什么?

    Ant
    是一種基于 Java XML build 工具。


    2
    下載、安裝 Ant
    安裝
    Ant
    下載 .zip 文件,解壓縮到 c:\ant1.3( 后面引用為
    %ANT_HOME%)

    2.1
    在你運行 Ant 之前需要做一些配置工作。

    ·
    bin 目錄加入 PATH 環境變量。
    ·
    設定 ANT_HOME 環境變量,指向你安裝 Ant 的目錄。在一些 OS 上, Ant 的腳本可以猜測 ANT_HOME Unix Windos NT/2000 )-但最好不要依賴這一特性。

    ·
    可選地,設定 JAVA_HOME 環境變量(參考下面的高級小節),該變量應該指向你安裝 JDK 的目錄。
    注意:不要將 Ant ant.jar 文件放到 JDK/JRE lib/ext 目錄下。 Ant 是個應用程序,而 lib/ext 目錄是為 JDK 擴展使用的(如 JCE JSSE 擴展)。而且通過擴展裝入的類會有安全方面的限制。
    2.2
    運行 Ant

    運行 Ant 非常簡單,當你正確地安裝 Ant 后,只要輸入 ant 就可以了。


    n
    沒有指定任何參數時, Ant 會在當前目錄下查詢 build.xml 文件。如果找到了就用該文件作為 buildfile 。如果你用 -find 選項。 Ant 就會在上級目錄中尋找 buildfile ,直至到達文件系統的根。要想讓 Ant 使用其他的 buildfile ,可以用參數 -buildfile file ,這里 file 指定了你想使用的 buildfile

    n
    可以指定執行一個或多個 target 。當省略 target 時, Ant 使用標簽 <project> default 屬性所指定的 target


    命令行選項總結:
    ant [options] [target [target2 [target3] ...]]
    Options:
    -help print this message
    -projecthelp print project help information
    -version print the version information and exit
    -quiet be extra quiet
    -verbose be extra verbose
    -debug print debugging information
    -emacs produce logging information without adornments
    -logfile file use given file for log output
    -logger classname the class that is to perform logging
    -listener classname add an instance of class as a project listener
    -buildfile file use specified buildfile
    -find file search for buildfile towards the root of the filesystem and use the first one found
    -Dproperty=value set property to value
    例子
    ant
    使用當前目錄下的 build.xml 運行 Ant ,執行缺省的 target
    ant -buildfile test.xml
    使用當前目錄下的 test.xml 運行 Ant ,執行缺省的 target
    ant -buildfile test.xml dist
    使用當前目錄下的 test.xml 運行 Ant ,執行一個叫做 dist target
    ant -buildfile test.xml -Dbuild=build/classes dist
    使用當前目錄下的 test.xml 運行 Ant ,執行一個叫做 dist target ,并設定 build 屬性的值為 build/classes

    3
    編寫 build.xml

    Ant
    buildfile 是用 XML 寫的。每個 buildfile 含有一個 project


    buildfile
    中每個 task 元素可以有一個 id 屬性,可以用這個 id 值引用指定的任務。這個值必須是唯一的。(詳情請參考下面的 Task 小節)

    3.1 Projects

    project
    有下面的屬性:
    Attribute Description Required
    name
    項目名稱 . No
    default
    當沒有指定 target 時使用的缺省
    target Yes
    basedir
    用于計算所有其他路徑的基路徑。該屬性可以被 basedir property 覆蓋。當覆蓋時,該屬性被忽略。如果屬性和 basedir property 都沒有設定,就使用 buildfile 文件的父目錄。
    No
    項目的描述以一個頂級的 <description> 元素的形式出現(參看 description 小節)。


    一個項目可以定義一個或多個 target 。一個 target 是一系列你想要執行的。執行 Ant 時,你可以選擇執行那個 target 。當沒有給定 target 時,使用 project default 屬性所確定的 target

    3.2 Targets

    一個 target 可以依賴于其他的 target 。例如,你可能會有一個 target 用于編譯程序,一個 target 用于生成可執行文件。你在生成可執行文件之前必須先編譯通過,所以生成可執行文件的 target 依賴于編譯 target Ant 會處理這種依賴關系。

    然而,應當注意到, Ant depends 屬性只指定了 target 應該被執行的順序-如果被依賴的 target 無法運行,這種 depends 對于指定了依賴關系的 target 就沒有影響。

    Ant
    會依照 depends 屬性中 target 出現的順序(從左到右)依次執行每個 target 。然而,要記住的是只要某個 target 依賴于一個 target ,后者就會被先執行。
    <target name="A"/>
    <target name="B" depends="A"/>
    <target name="C" depends="B"/>
    <target name="D" depends="C,B,A"/>
    假定我們要執行 target D 。從它的依賴屬性來看,你可能認為先執行 C ,然后 B ,最后 A 被執行。錯了, C 依賴于 B B 依賴于 A ,所以先執行 A ,然后 B ,然后 C ,最后 D 被執行。

    一個 target 只能被執行一次,即時有多個 target 依賴于它(看上面的例子)。

    如果(或如果不)某些屬性被設定,才執行某個 target 。這樣,允許根據系統的狀態( java version, OS, 命令行屬性定義等等)來更好地控制 build 的過程。要想讓一個 target 這樣做,你就應該在 target 元素中,加入 if (或 unless )屬性,帶上 target 因該有所判斷的屬性。例如:
    <target name="build-module-A" if="module-A-present"/>
    <target name="build-own-fake-module-A" unless="module-A-present"/>
    如果沒有 if unless 屬性, target 總會被執行。

    可選的 description 屬性可用來提供關于 target 的一行描述,這些描述可由 -projecthelp 命令行選項輸出。

    將你的 tstamp task 在一個所謂的初始化 target 是很好的做法,其他的 target 依賴這個初始化 target 。要確保初始化 target 是出現在其他 target 依賴表中的第一個 target 。在本手冊中大多數的初始化 target 的名字是 "init"

    target
    有下面的屬性:
    Attribute Description Required
    name target
    的名字 Yes
    depends
    用逗號分隔的 target 的名字列表,也就是依賴表。
    No
    if
    執行 target 所需要設定的屬性名。
    No
    unless
    執行 target 需要清除設定的屬性名。
    No
    description
    關于 target 功能的簡短描述。
    No

    3.3 Tasks

    一個 task 是一段可執行的代碼。


    一個 task 可以有多個屬性(如果你愿意的話,可以將其稱之為變量)。屬性只可能包含對 property 的引用。這些引用會在 task 執行前被解析。

    下面是 Task 的一般構造形式:
    <name attribute1="value1" attribute2="value2" ... />
    這里 name task 的名字, attributeN 是屬性名, valueN 是屬性值。

    有一套內置的( built-in task ,以及一些可選 task ,但你也可以編寫自己的 task

    所有的 task 都有一個 task 名字屬性。 Ant 用屬性值來產生日志信息。

    可以給 task 賦一個 id 屬性:
    <taskname id="taskID" ... />
    這里 taskname task 的名字,而 taskID 是這個 task 的唯一標識符。通過這個標識符,你可以在腳本中引用相應的 task 。例如,在腳本中你可以這樣:
    <script ... >
    task1.setFoo("bar");
    </script>
    設定某個 task 實例的 foo 屬性。在另一個 task 中(用 java 編寫),你可以利用下面的語句存取相應的實例。
    project.getReference("task1").
    注意 1 :如果 task1 還沒有運行,就不會被生效(例如:不設定屬性),如果你在隨后配置它,你所作的一切都會被覆蓋。

    注意 2 :未來的 Ant 版本可能不會兼容這里所提的屬性,因為很有可能根本沒有 task 實例,只有 proxies

    3.4 Properties

    一個 project 可以有很多的 properties 。可以在 buildfile 中用 property task 來設定,或在 Ant 之外設定。一個 property 有一個名字和一個值。 property 可用于 task 的屬性值。這是通過將屬性名放在 "${" "}" 之間并放在屬性值的位置來實現的。例如如果有一個 property builddir 的值是 "build" ,這個 property 就可用于屬性值: ${builddir}/classes 。這個值就可被解析為 build/classes

    內置屬性

    如果你使用了 <property> task 定義了所有的系統屬性, Ant 允許你使用這些屬性。例如, ${os.name} 對應操作系統的名字。

    要想得到系統屬性的列表可參考 the Javadoc of System.getProperties

    除了 Java 的系統屬性, Ant 還定義了一些自己的內置屬性:
    basedir project
    基目錄的絕對路徑 ( <project> basedir 屬性一樣 )

    ant.file buildfile
    的絕對路徑。
    ant.version Ant
    的版本。
    ant.project.name
    當前執行的 project 的名字;由 <project> name 屬性設定 .
    ant.java.version Ant
    檢測到的 JVM 的版本; 目前的值有
    "1.1", "1.2", "1.3" and "1.4".
    ???
    例子

    <project name="MyProject" default="dist" basedir=".">

    <!-- set global properties for this build -->
    <property name="src" value="."/>
    <property name="build" value="build"/>
    <property name="dist" value="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">
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}"/>
    </target>

    <target name="dist" depends="compile">
    <!-- 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">
    <!-- Delete the ${build} and ${dist} directory trees -->
    <delete dir="${build}"/>
    <delete dir="${dist}"/>
    </target>

    </project>

    3.5 Path-like Structures

    你可以用 ":" ";" 作為分隔符,指定類似 PATH CLASSPATH 的引用。 Ant 會把分隔符轉換為當前系統所用的分隔符。

    當需要指定類似路徑的值時,可以使用嵌套元素。一般的形式是
    <classpath>
    <pathelement path="${classpath}"/>
    <pathelement location="lib/helper.jar"/>
    </classpath>
    location
    屬性指定了相對于 project 基目錄的一個文件和目錄,而 path 屬性接受逗號或分號分隔的一個位置列表。 path 屬性一般用作預定義的路徑--其他情況下,應該用多個 location 屬性。

    為簡潔起見, classpath 標簽支持自己的 path location 屬性。所以:
    <classpath>
    <pathelement path="${classpath}"/>
    </classpath>
    可以被簡寫作:
    <classpath path="${classpath}"/>
    也可通過 <fileset> 元素指定路徑。構成一個 fileset 的多個文件加入 path-like structure 的順序是未定的。
    <classpath>
    <pathelement path="${classpath}"/>
    <fileset dir="lib">
    <include name="**/*.jar"/>
    </fileset>
    <pathelement location="classes"/>
    </classpath>
    上面的例子構造了一個路徑值包括: ${classpath} 的路徑,跟著 lib 目錄下的所有 jar 文件,接著是 classes 目錄。

    如果你想在多個 task 中使用相同的 path-like structure ,你可以用 <path> 元素定義他們(與 target 同級),然后通過 id 屬性引用--參考 Referencs 例子。

    path-like structure
    可能包括對另一個 path-like structurede 的引用(通過嵌套 <path> 元素):
    <path id="base.path">
    <pathelement path="${classpath}"/>
    <fileset dir="lib">
    <include name="**/*.jar"/>
    </fileset>
    <pathelement location="classes"/>
    </path>
    <path id="tests.path">
    <path refid="base.path"/>
    <pathelement location="testclasses"/>
    </path>
    前面所提的關于 <classpath> 的簡潔寫法對于 <path> 也是有效的,如:
    <path id="tests.path">
    ? <path refid="base.path"/>
    <pathelement location="testclasses"/>
    </path>
    可寫成:
    <path id="base.path" path="${classpath}"/>
    命令行變量

    有些 task 可接受參數,并將其傳遞給另一個進程。為了能在變量中包含空格字符,可使用嵌套的 arg 元素。
    Attribute Description Required
    value
    一個命令行變量;可包含空格字符。 只能用一個
    line
    空格分隔的命令行變量列表。
    file
    作為命令行變量的文件名;會被文件的絕對名替代。

    path
    一個作為單個命令行變量的 path-like 的字符串;或作為分隔符, Ant 會將其轉變為特定平臺的分隔符。


    例子

    <arg value="-l -a"/>
    是一個含有空格的單個的命令行變量。
    <arg line="-l -a"/>
    是兩個空格分隔的命令行變量。
    <arg path="/dir;/dir2:\dir3"/>
    是一個命令行變量,其值在 DOS 系統上為 \dir;\dir2;\dir3 ;在 Unix 系統上為 /dir:/dir2:/dir3

    3.6 References

    buildfile
    元素的 id 屬性可用來引用這些元素。如果你需要一遍遍的復制相同的 XML 代碼塊,這一屬性就很有用--如多次使用 <classpath> 結構。

    下面的例子:
    <project ... >
    <target ... >???
    <rmic ...>?????
    <classpath>???????
    <pathelement location="lib/"/>???????
    <pathelement path="${java.class.path}/"/>???????
    <pathelement path="${additional.path}"/>?????
    </classpath>???
    </rmic>?
    </target>
    <target ... >
    <javac ...>
    <classpath>
    <pathelement location="lib/"/>
    <pathelement path="${java.class.path}/"/>
    <pathelement path="${additional.path}"/>
    </classpath>
    </javac>
    </target>
    </project>
    可以寫成如下形式:
    <project ... >
    <path id="project.class.path">?
    <pathelement location="lib/"/>
    <pathelement path="${java.class.path}/"/>??
    <pathelement path="${additional.path}"/>
    </path>
    <target ... >
    <rmic ...>
    <classpath refid="project.class.path"/>
    </rmic>
    </target>
    <target ... >
    <javac ...>
    <classpath refid="project.class.path"/>
    </javac>
    </target>
    </project>
    所有使用 PatternSets, FileSets path-like structures 嵌套元素的 task 也接受這種類型的引用。
    ================================================================

    ?????????????????????????????? Ant
    全攻略(續)--- Ant 中的內置任務

    4.1 File
    Directory )類
    4.1.1 Mkdir
    n
    創建一個目錄,如果他的父目錄不存在,也會被同時創建。
    n
    例子:
    <mkdir dir="build/classes"/>
    n
    說明: 如果 build 不存在,也會被同時創建
    4.1.2 Copy
    n
    拷貝一個(組)文件、目錄
    n
    例子:
    1.
    拷貝單個的文件:
    <copy file="myfile.txt" tofile="mycopy.txt"/>
    2.
    拷貝單個的文件到指定目錄下

    <copy file="myfile.txt" todir="../some/other/dir"/>
    3.
    拷貝一個目錄到另外一個目錄下
    ? <copy todir="../new/dir">
    ??? <fileset dir="src_dir"/>
    ? </copy>
    4.
    拷貝一批文件到指定目錄下
    ? <copy todir="../dest/dir">
    ??? <fileset dir="src_dir">
    ????? <exclude name="**/*.java"/>
    ??? </fileset>
    ? </copy>

    ? <copy todir="../dest/dir">
    ??? <fileset dir="src_dir" excludes="**/*.java"/>
    ? </copy>
    5.
    拷貝一批文件到指定目錄下,將文件名后增加。 Bak 后綴
    ? <copy todir="../backup/dir">
    ??? <fileset dir="src_dir"/>
    ??? <mapper type="glob" from="*" to="*.bak"/>
    ? </copy>
    6.
    拷貝一組文件到指定目錄下,替換其中的 @ 標簽 @ 內容
    ? <copy todir="../backup/dir">
    ??? <fileset dir="src_dir"/>
    ??? <filterset>
    ????? <filter token="TITLE" value="Foo Bar"/>
    ??? </filterset>
    ? </copy>
    4.1.3 Delete
    n
    刪除一個(組)文件或者目錄
    n
    例子
    1.
    刪除一個文件
    <delete file="/lib/ant.jar"/>
    2.
    刪除指定目錄及其子目錄
    ? <delete dir="lib"/>
    3.
    刪除指定的一組文件
    ? <delete>
    ??? <fileset dir="." includes="**/*.bak"/>
    ? </delete>
    4.
    刪除指定目錄及其子目錄,包括他自己
    ? <delete includeEmptyDirs="true">
    ??? <fileset dir="build"/>
    ? </delete>
    4.1.4 Move
    n
    移動或重命名一個(組)文件、目錄
    n
    例子:
    1.
    移動或重命名一個文件
    <move file="file.orig" tofile="file.moved"/>
    2.
    移動或重命名一個文件到另一個文件夾下面
    <move file="file.orig" todir="dir/to/move/to"/>
    3.
    將一個目錄移到另外一個目錄下
    <move todir="new/dir/to/move/to">
    <fileset dir="src/dir"/>
    </move>
    4.
    將一組文件移動到另外的目錄下
    <move todir="some/new/dir">
    <fileset dir="my/src/dir">
    <include name="**/*.jar"/>
    <exclude name="**/ant.jar"/>
    </fileset>
    </move>
    5.
    移動文件過程中增加。 Bak 后綴
    <move todir="my/src/dir">
    <fileset dir="my/src/dir">
    <exclude name="**/*.bak"/>
    </fileset>
    <mapper type="glob" from="*" to="*.bak"/>
    </move>

    ? ================================================================
    ???????????????????????????????????????????? Ant
    全攻略 ? --? Java 相關任務

    4.2.1 Javac
    n
    編譯 java 原代碼
    n
    例子
    1. <javac srcdir="${src}"
    ???????? destdir="${build}"
    ???????? classpath="xyz.jar"
    ???????? debug="on"
    ? />
    編譯 ${src} 目錄及其子目錄下的所有。 Java 文件,。 Class 文件將放在 $ build }指定的目錄下, classpath 表示需要用到的類文件或者目錄, debug 設置為 on 表示輸出 debug 信息
    2. <javac srcdir="${src}:${src2}"
    ???????? destdir="${build}"
    ???????? includes="mypackage/p1/**,mypackage/p2/**"
    ???????? excludes="mypackage/p1/testpackage/**"
    ???????? classpath="xyz.jar"
    ???????? debug="on"
    ? />
    編譯 ${src} ${src2} 目錄及其子目錄下的所有。 Java 文件,但是 package/p1/**,mypackage/p2/** 將被編譯,而 mypackage/p1/testpackage/** 將不會被編譯。 Class 文件將放在 $ build }指定的目錄下, classpath 表示需要用到的類文件或者目錄, debug 設置為 on 表示輸出 debug 信息
    3. <property name="classpath" value=".;./xml-apis.jar;../lib/xbean.jar;./easypo.jar"/>

    <javac srcdir="${src}"
    ???????? destdir="${src}"
    classpath="${classpath}"
    debug="on"
    />
    路徑是在 property 中定義的
    4.2.2 java
    n
    執行指定的 java
    n
    例子:
    1. <java classname="test.Main">
    ???????? <classpath>
    ?????????? <pathelement location="dist/test.jar"/>
    ?????????? <pathelement path="${java.class.path}"/>
    ???????? </classpath>
    ?????? </java>
    classname
    中指定要執行的類, classpath 設定要使用的環境變量
    2. <path id="project.class.path">
    ??? <pathelement location="lib/"/>
    ??? <pathelement path="${java.class.path}/"/>
    ??? <pathelement path="${additional.path}"/>
    ? </path>

    ? <target ... >
    ??? <rmic ...>
    ????? <classpath refid="project.class.path"/>
    ??? </rmic>
    ? </target>

    ================================================================

    ?????????????????????????????????????? Ant 全攻略 ? --???? 通過 JDBC 執行 SQL 語句

    4.5
    執行 SQL 語句

    n
    通過 jdbc 執行 SQL 語句
    n
    例子:
    1. <sql
    ??? driver="org.gjt.mm.mysql.Driver"
    ??? url="jdbc:mysql://localhost:3306/mydb"
    ??? userid="root"
    ??? password="root"
    ??? src="data.sql"
    />
    2. <sql
    ??? driver="org.database.jdbcDriver"
    ??? url="jdbc:database-url"
    ??? userid="sa"
    ??? password="pass"
    ??? src="data.sql"
    ??? rdbms="oracle"
    ??? version="8.1."
    ??? >
    </sql>
    只有在 oracle 、版本是 8.1 的時候才執行

    ================================================================
    ??????????????????????????????????????? Ant
    全攻略之 ? --- ? 發送郵件

    4.6
    發送郵件
    n
    使用 SMTP 服務器發送郵件
    n
    例子:
    <mail mailhost="smtp.myisp.com" mailport="1025" subject="Test build">
    ? <from address="me@myisp.com"/>
    ? <to address="all@xyz.com"/>
    ? <message>The ${buildname} nightly build has completed</message>
    ? <fileset dir="dist">
    ??? <includes name="**/*.zip"/>
    ? </fileset>
    </mail>
    l mailhost
    SMTP 服務器地址
    l mailport
    服務器端口
    l subject
    ? 主題
    l from
    ??? 發送人地址
    l to
    ????? 接受人地址
    l message
    發送的消息
    l fileset
    ? 設置附件

    posted on 2006-12-31 11:37 junky 閱讀(339) 評論(0)  編輯  收藏 所屬分類: ant


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲色图黄色小说| 免费国产污网站在线观看不要卡| 国产免费丝袜调教视频| 亚洲欧美自偷自拍另类视| 亚洲性久久久影院| 99久9在线|免费| 国产亚洲视频在线观看网址 | 亚洲AV综合色区无码一区爱AV| 91福利免费体验区观看区| 亚洲AV电影天堂男人的天堂| 亚洲国产精品一区第二页| 女人18毛片a级毛片免费| 成人无码a级毛片免费| 国产精品亚洲自在线播放页码| 国产亚洲精品激情都市| 国产va精品免费观看| 一级特黄aaa大片免费看| 亚洲AV综合色区无码二区爱AV| 亚洲Av无码乱码在线播放| 久久成人国产精品免费软件| 一级黄色免费大片| 丁香婷婷亚洲六月综合色| 亚洲国产成人一区二区三区| 日韩中文无码有码免费视频 | 亚洲精品岛国片在线观看| 69式国产真人免费视频| 18禁超污无遮挡无码免费网站| 色综合久久精品亚洲国产| 亚洲日本在线免费观看| 亚洲乱色熟女一区二区三区丝袜| 午夜成人免费视频| 国产免费丝袜调教视频| 嫩草成人永久免费观看| aa午夜免费剧场| 国产亚洲福利精品一区二区| 亚洲人成电影在线观看网| 日韩亚洲AV无码一区二区不卡 | 亚洲色图校园春色| 亚洲免费观看视频| 伊在人亚洲香蕉精品区麻豆| 毛片免费视频播放|