久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Ant簡(jiǎn)介

 sowill 2005-12-11
Ant 是一個(gè)純Java工具,,所以,,要運(yùn)行它,首先需要安裝一個(gè)Java虛擬機(jī)(JVM),。你可能已經(jīng)安裝了一個(gè)JVM,,但是如果還沒(méi)有,你可以從 http://java./j2se/1.4/download.html 上面免費(fèi)下載一個(gè),。然后,,從 http://www./dist/jakarta/jakarta-ant/release/v1.4.1/bin/ 下載Ant的二進(jìn)制版本。將Ant壓縮文檔unzip或者untar(取決于你的系統(tǒng)平臺(tái))到你選擇的安裝目錄(Windows下面通常是c:\Ant,,UNIX下面通常是/usr/local/ant),。

    在軟件安裝完成之后,必須指示你的系統(tǒng)去找到這兩個(gè)目錄來(lái)啟動(dòng)那些應(yīng)用程序,。通過(guò)將這兩個(gè)工具的bin目錄放置到你的PATH環(huán)境變量中做到這一點(diǎn),。此外,你應(yīng)該定義JAVA_HOME和ANT_HOME環(huán)境變量來(lái)讓那些工具了解它們的位置,。

如果你用的系統(tǒng)是Windows,,那么你需要在autoexec.bat文件中加入以下數(shù)行語(yǔ)句:

set JAVA_HOME=<JAVA_HOME>
set ANT_HOME=<ANT_HOME>
set PATH=%PATH%;<JAVA_HOME>\bin;<ANT_HOME>\bin

      重啟機(jī)器以完成安裝。如果系統(tǒng)報(bào)告說(shuō)傳遞了太多的參數(shù)到SET命令,,那么可能是PATH中包含了空格,。要解決這個(gè)問(wèn)題,就在一個(gè)單一行中定義PATH,,并且將它用雙引號(hào)引起來(lái),。

      如果你的系統(tǒng)是UNIX并且正在使用Bash外殼,在~/.bash_profile文件中加入以下數(shù)行:

JAVA_HOME=<JAVA_HOME>
ANT_HOME=<ANT_HOME>
PATH=$PATH:<JAVA_HOME>/bin:<ANT_HOME>/bin
export JAVA_HOME ANT_HOME PATH

    運(yùn)用其他外殼的用戶應(yīng)該改寫這段腳本并且編輯合適的配置文件,。為更新系統(tǒng)環(huán)境,,輸入.~/.bash_profile。為測(cè)試是否成功安裝,在終端窗口輸入java 和ant 命令,。系統(tǒng)會(huì)發(fā)現(xiàn)這些命令并運(yùn)行之,。

    Ant像Make一樣工作。進(jìn)入要運(yùn)行的buildfile(其缺省的名字為build.xml)所在的目錄,,然后輸入ant,。要運(yùn)行另外一個(gè)目錄中的buildfile或者名字不是build.xml的buildfile,需要使用-buildfile參數(shù),。Ant也可以通過(guò)使用-find參數(shù)在文件系統(tǒng)中遞歸地找到所需的buildfile,,因此可以從工程中的任意地方啟動(dòng)Ant。要顯示關(guān)于命令行ant參數(shù)的幫助,,請(qǐng)輸入 ant -help,。

Ant簡(jiǎn)介

作者:Michel Casabianca

本文講述如何使用這個(gè)具有極大價(jià)值的工具(Ant)來(lái)構(gòu)建和部署Java工程。

    Ant是一個(gè)用于簡(jiǎn)單或復(fù)雜Java工程的自動(dòng)化構(gòu)建,、部署工具,它對(duì)于那些具有分布式開發(fā)團(tuán)隊(duì)或者相信通過(guò)頻繁的構(gòu)建來(lái)進(jìn)行不間斷集成的公司尤其有用,。對(duì)于那些建立傳統(tǒng)全Java應(yīng)用程序以及那些使用HTML,、JSP和Java servlets創(chuàng)建Web應(yīng)用程序的公司來(lái)說(shuō),Ant極具價(jià)值,。無(wú)論你的Java開發(fā)者使用什么操作系統(tǒng),、集成開發(fā)環(huán)境或者構(gòu)建環(huán)境,Ant都可以將你的工程集合在一起,,用于那些重要的構(gòu)建,。Ant也能夠自動(dòng)化并且同步文檔部署,這通常發(fā)生在軟件開發(fā)過(guò)程中的沒(méi)有正式文檔和文檔比較混亂的部分,。

    在構(gòu)建和部署Java應(yīng)用程序的時(shí)候,,Ant處理著大量有用的任務(wù)。最基本的任務(wù)包括添加和移除目錄,、使用FTP拷貝和下載文件,、創(chuàng)建JAR和ZIP文件以及創(chuàng)建文檔。更高級(jí)的特性包括用源代碼控制系統(tǒng)諸如CVS或者SourceSafe來(lái)檢查源代碼,、執(zhí)行SQL查詢或腳本,、將XML文件轉(zhuǎn)換為人能識(shí)別的HTML,以及為遠(yuǎn)程方法調(diào)用生成stub(存根)文件,。

   Ant和Make(非常著名的構(gòu)建工具,,很多C語(yǔ)言開發(fā)人員都使用它)之間有什么不同?Ant是為Java而創(chuàng)建,,帶有屬于其自身的,、獨(dú)特的范例,具有可移植性。而Make依賴于固定的操作系統(tǒng)命令(因此一個(gè)運(yùn)行在微軟Windows下的Make文件對(duì)于使用UNIX的開發(fā)者來(lái)說(shuō)毫無(wú)用處),,利用Ant構(gòu)建的純Java工程是可移植的,,因?yàn)锳nt本身就是用Java編寫的,并且Ant bulidfiles使用XML語(yǔ)法,。

本文將向你展示一個(gè)典型的Ant文件,,它使用了很多的Ant基本任務(wù)。

一個(gè)典型的Ant工程

    Ant使用用XML編寫的,、稱作bulidfile的工具來(lái)開展它的工作,。讓我們考慮一個(gè)源文件在src目錄中、類庫(kù)(包括JAR文件)在lib目錄中,、API文檔在doc/api目錄中的典型Java工程,。我們可以利用如下的Ant buildfile來(lái)構(gòu)建這個(gè)工程。

<?xml version="1.0"?>
<project name="typical" default="all" basedir=".">
 <property name="name" value="typical"/>
 <property name="src" value="src"/>
 <property name="lib" value="lib"/>
 <property name="api" value="doc/api"/>

 <property name="tmp" value="tmp"/>
 <property name="classpath" value="${lib}/${name}.jar"/>
 <property name="main" value="test.Main"/>

 <target name="bin"
         description="Compile Java source files">
  <javac srcdir="${src}"
         destdir="${tmp}"
         debug="on"

         deprecation="on"/>
 </target>

 <target name="jar" depends="bin"
         description="Build jar file">
  <jar jarfile="${lib}/${name}.jar"
       basedir="${tmp}"/>
 </target>

 <target name="run" depends="jar"

         description="Run the program">
  <java classname="${main}"
        classpath="${classpath}"/>
 </target>
 <target name="api"
         description="Generate API documentation">
  <javadoc sourcepath="${src}"
           destdir="${api}"
           packagenames="test.*"/>
 </target>


 <target name="clean"
         description="Clean generated files">
  <delete dir="${tmp}"/>
  <mkdir dir="${tmp}"/>
 </target>

 <target name="all" depends="clean,jar,api"/>

</project>
                  

也許這里的語(yǔ)法看起來(lái)非常冗長(zhǎng)(你可以使用Make寫一個(gè)短的多的buildfile),,但是Ant buildfile的優(yōu)點(diǎn)是其可讀性好,。

    buildfile的內(nèi)容被包含在元素中。工程一般有一套工程屬性,,帶有一些區(qū)--由一些Ant任務(wù)諸如編譯源代碼,、生成目錄和生成JAR文件等組成。

    工程和屬性,。在 元素下面首先可以找到屬性,。這些屬性元素類似于變量。你通??梢园凑杖蝿?wù)在工程內(nèi)的任何地方使用屬性值,,這些任務(wù)是通過(guò)使用表達(dá)式 $ {屬性名(property-name)} 在< target> 元素中定義的。舉例來(lái)說(shuō),,在上述的buildfile 例子中,,值${src}會(huì)被解析成src,因?yàn)槲覀冊(cè)趯傩詤^(qū)中對(duì)它是如此定義的,。在我們的buildfile中,,我們使用${src}屬性作為在javac任務(wù)中的srcdir的特性的值。

   當(dāng)在命令行中用句法-Dproperty=value來(lái)調(diào)用Ant的時(shí)候,,可能會(huì)定義或者重寫屬性,。比如說(shuō),如果你想將src的值設(shè)定為source-directory,,你可以在命令行中鍵入ant DDsrc=sourc_directory,。此外,屬性是恒定的,,所以一旦被定義,,就不能修改它們的值,。

   目標(biāo)和任務(wù)。目標(biāo)(target)元素定義了一套指令來(lái)實(shí)現(xiàn)某類工作,??梢园阉鼈儽茸饔珊芏嗳蝿?wù)構(gòu)成的程序函數(shù)(與編程指令相比)。舉例來(lái)說(shuō),,在上述的buildfile例子中,,名為jar的目標(biāo)(具有屬性name=jar的元素)包含有一個(gè)單一的任務(wù)以從類文件來(lái)生成JAR文件。這個(gè)例子中只是湊巧目標(biāo)名稱和任務(wù)名稱相同,,但是這個(gè)并不是必需的--目標(biāo)元素名稱是由創(chuàng)建者選擇的,,但是任務(wù)名稱是固定的,并且與那些定義在Ant標(biāo)記中引用的目標(biāo)名相匹配,。這個(gè)特殊的目標(biāo)(我們的目標(biāo))依賴于bin 目標(biāo)(比如說(shuō),,depends=bin),這意味著如果目標(biāo) jar被調(diào)用,,那么它就會(huì)首先調(diào)用bin目標(biāo)(如果bin目標(biāo)還沒(méi)有被執(zhí)行),。當(dāng)調(diào)用Ant時(shí),你可以傳遞一個(gè)目標(biāo)在命令行上運(yùn)行,。比如說(shuō),,通過(guò)在命令行輸入命令ant jar調(diào)用Ant,可以運(yùn)行目標(biāo)jar,。如果不指定一個(gè)目標(biāo)而調(diào)用Ant,在工程的默認(rèn)屬性中指定的目標(biāo)就會(huì)被運(yùn)行(在本例中,,是"all"目標(biāo)),。你也可以通過(guò)用空格分隔目標(biāo)的辦法來(lái)調(diào)用帶有多個(gè)目標(biāo)的Ant。

目標(biāo)及其任務(wù)

  如前所述,,Ant bulidfile是一個(gè)處理工程構(gòu)建或部署給定階段的目標(biāo)的集合,。在這里我將描述在我們的示例buildfile中使用到的目標(biāo),并詳細(xì)說(shuō)明在使用這些目標(biāo)及其相關(guān)的任務(wù)的時(shí)候會(huì)碰到的一些常見(jiàn)問(wèn)題,。你可以根據(jù)自身的需要快速地定制這里所展示的bulidfile,。以下的例子描述了這些通過(guò)使用我們的Ant bulidfile完成這些工作的步驟:

1. 編譯Java源文件
2. 創(chuàng)建JAR文件
3. 運(yùn)行程序
4. 生成API文檔
5. 清除生成的class(類)文件

1. 編譯Java源文件

這個(gè)目標(biāo)的使用可能是最廣泛的。通常由以下代碼來(lái)實(shí)現(xiàn):

<target name="bin" description="Compile Java source files">

  <javac srcdir="${src}"
         destdir="${tmp}"
         debug="on"
         deprecation="on"/>
 </target>
                  

     這個(gè)目標(biāo)包括一個(gè)單一的javac任務(wù),,這個(gè)任務(wù)就是編譯Java源文件,。在上面的這個(gè)例子中使用的屬性非常簡(jiǎn)單明了:srcdir是存放源文件的目錄,destdir是存放所生成的類文件的目錄,。最后兩個(gè)屬性是用于javac編譯選項(xiàng)的,。注意到optimize屬性(這里沒(méi)有使用)沒(méi)有什么用,所以最新的Java編譯器沒(méi)有將該屬性放入其中,。當(dāng)需要類庫(kù)進(jìn)行編譯時(shí),,你應(yīng)該添加一個(gè)classpath(類路徑)屬性以便在其中列出JAR文件或者目錄。可以在UNIX或者Windows系統(tǒng)下面寫一個(gè)Ant路徑,,其中使用冒號(hào)或者分號(hào)作為路徑的分隔標(biāo)記,,使用斜線或者反斜線作為文件的分隔標(biāo)記。這樣,,定義為lib/foo.jar:lib/bar.jar的classpath在UNIX下不用修改就可以直接使用,,而在Windows下就會(huì)被自動(dòng)轉(zhuǎn)換成lib\foo.jar;lib\bar.jar。

   這個(gè)任務(wù)力圖使用與JDK一起提供的編譯器,。該編譯器是帶有其自有類的 Java程序,,其自有類存在于tools.jar文件中(該文件位于lib目錄中)。這樣,,tools.jar文件必須在classpath中被指定,。在很多操作系統(tǒng)中(包括Solaris和Linux),這個(gè)不成其為問(wèn)題,,在使用javac任務(wù)時(shí),,如果Ant不能使用這個(gè)標(biāo)準(zhǔn)編譯器的話,它就會(huì)抗議,。為了解決該問(wèn)題,,只要簡(jiǎn)單地將lib/tools.jar文件與jre/lib/ext/tools.jar做一個(gè)鏈接就可以了。

2. 創(chuàng)建一個(gè)JAR文件

這個(gè)任務(wù)從Java類(以及諸如圖片或者本地文件等其他資源)生成一個(gè)JAR文件,。在我們的示例buildfile中,,通過(guò)如下代碼實(shí)現(xiàn):

<target name="jar" depends="bin"
         description="Build jar file">
  <jar jarfile="${lib}/${name}.jar" basedir="${tmp}"/>
 </target>
                  

     jar元素的屬性非常明顯。當(dāng)你想要包括文檔庫(kù)中的其他文件時(shí),,你可以在任務(wù)中放置fileset元素,。如同它們的名字所暗示的那樣,那些元素(并不是任務(wù)本身)定義了一系列的文件,。讓我們?cè)O(shè)想一下,,如果你想要引入一些位于img目錄中的PNG(Portable Network Graphics)格式的圖片文件,你應(yīng)該編寫如下代碼:

<target name="jar" depends="bin"
        description="Build jar file">
 <jar jarfile="${lib}/${name}.jar"
      basedir="${tmp}">
  <fileset dir="img" includes="*.png"/>

 </jar>
</target>
                  

   dir屬性指出了文件的基本目錄,;而includes包含了一個(gè)表達(dá)式,,該表達(dá)式定義了一些文件以包括在fileset中。那些表達(dá)式有一個(gè)與shell命令非常接近的句法,,"*"字符匹配零個(gè)或者多個(gè)字符而",?"只匹配一個(gè)字符。你可以在目錄樹中(包括零)使用表達(dá)式"**"來(lái)替代任意數(shù)目的目錄,。比如說(shuō),,如果在上述的例子中要包括的圖片位于img的任意一個(gè)子目錄中,那么應(yīng)該在jar元素中放置如下所示的fileset:

<fileset dir="img" includes="**/*.png"/> 
                  

    也可以使用excludes屬性把文件從fileset中排除,。比如說(shuō),,要包括在img目錄中的除了.ida類型的所有其他文件,,那么可以按照如下方式編寫fileset:

<fileset dir="img" excludes="**/*.dia"/>
                      

    缺省情況下,某些文件是被所有的fileset排除在外的,,這些文件是編輯器生成的備份文件(例如UNIX下的**/*~文件)和版本控制目錄(例如**/CVS/*),。如果要告訴Ant你不想排除那些文件,那么就需要在fileset元素中加入屬性defaultexcludes="false",。

Ant也可以處理用于打包Web應(yīng)用程序的WAR文件和用于更復(fù)雜應(yīng)用程序的EAR文件,,這些復(fù)雜的應(yīng)用程序經(jīng)常結(jié)合使用JSP、Servlets和EJB,。Ant有專門的任務(wù)來(lái)生成WAR和EAR文件,。那些任務(wù)是JAR任務(wù)的擴(kuò)展,定義了新的嵌套元素和屬性,。WAR任務(wù)定義了,、等嵌套元素,,這些元素定義特別的fileset的元素,。包括在那些fileset中的文件將在文檔庫(kù)的WEB-INF/lib、WEB-INF/classes和WEB-INF以及META-INF目錄中結(jié)束,。同時(shí),,它也為該文檔(WEB-INF/web.xml)的部署描述符定義webxml屬性。

EAR任務(wù)使用元素來(lái)將文件放入文檔的META-INF目錄,,將appxml屬性用于部署描述符(META-INF/application.xml),。

3. 運(yùn)行程序

為運(yùn)行Java應(yīng)用程序,需要使用java任務(wù),,如下面的代碼所示:

<target name="run" depends="jar"
         description="Run the program">
  <java classname="${main}"
        classpath="${classpath}"/>
 </target>
                  

classname定義了包括main()方法運(yùn)行程序的打包的類的名稱,,classpath包含了運(yùn)行它的類路徑??梢允褂们短椎腶rg元素傳遞命令行參數(shù),,或者通過(guò)嵌套sysproperty元素定義系統(tǒng)屬性,。這兩種動(dòng)作執(zhí)行起來(lái)都會(huì)非??欤?yàn)槿笔∏闆r下,,該程序運(yùn)行在運(yùn)行Ant的虛擬機(jī)(可以使用fork屬性讓Ant啟動(dòng)一個(gè)新的虛擬機(jī))上,。

元素中,通過(guò)使用classpath屬性指定了類路徑,。用或者子元素(subelement)嵌套也是可以的,。比如說(shuō),要在lib目錄下包括在classpath屬性中的條目,、目錄類以及所有的JAR文件,,可以編寫如下代碼:

<java classname="${main}">
 <classpath>
    <pathelement path="${classpath}"/>
    <pathelement location="classes"/>
    <fileset dir="lib" includes="*.jar"/>
   </classpath>
  </java>
                  

如果要重用一個(gè)路徑,,我們可以在元素中定義它及其ID,并且在元素引用它們,。舉例來(lái)說(shuō),,如果我們想重用在上面定義的路徑,可以按照如下所示編寫代碼:

	 <path id="run.path">
	   <pathelement path="${classpath}"/>
	   <pathelement location="classes"/>
	   <fileset dir="lib" includes="*.jar"/>	 
	 </path>
                  

4. 生成API文檔

這里的目標(biāo)是通過(guò)使用javadoc生成API文檔,。大體說(shuō)來(lái),,這是由一個(gè)單一javadoc任務(wù)構(gòu)成的簡(jiǎn)易目標(biāo),代碼如下:

  <target name="api"
         description="Generate API documentation">
    <javadoc sourcepath="${src}"
           destdir="${api}"
           packagenames="test.*"/>
   </target>
                  

sourcepath和destdi是顯而易見(jiàn)的屬性,。packagenames屬性是一個(gè)以逗號(hào)分隔的,、提供文檔的包列表。雖然Java的import語(yǔ)句不是遞歸的,,但是packagenames屬性卻是遞歸的,。這意味著語(yǔ)句packagenames="test.*"可以為test包、test.foo包和test.foo.bar包提供文檔,,但是不會(huì)為foo或者foo.test包提供文檔,。

可以使用windowtitle、doctitle,、header,、footer和bottom這些包含HTML代碼的屬性定義窗口和文檔的標(biāo)題以及所生成頁(yè)面的頁(yè)眉、頁(yè)腳和底行,。注意:應(yīng)該用相應(yīng)的XML實(shí)體(< 和")來(lái)代替XML格式字符(< 和 "),。也可以用link屬性為文檔鏈接指定一個(gè)URL。我們會(huì)說(shuō)你用String參數(shù)編寫了一個(gè)方法,。對(duì)于一個(gè)生成的不帶有l(wèi)ink屬性的文檔,,在方法文檔中你就只有一個(gè)純文本java.lang.String。當(dāng)使用一個(gè)合適的link屬性時(shí),,這將顯示為一個(gè)到Sun的java.lang.String類的文檔的鏈接,。

5. 清除生成的類文件

該目標(biāo)清除生成的類文件。比如說(shuō),,要清除在tmp子目錄中的類文件(以及其他資源),,可以編寫如下代碼:

<target name="clean"
         description="Clean generated files">
  <delete dir="${tmp}"/>
  <mkdir dir="${tmp}"/>
 </target>
                  

清除類文件總是一個(gè)很好的主意,因?yàn)樗梢栽趯?lái)的編譯中避免錯(cuò)誤的相關(guān)性問(wèn)題,。假設(shè)你在類A中定義了一個(gè)常量foo,,并且在類B中使用它。當(dāng)你編譯這些Java源文件的時(shí)候,,foo的值被嵌入在B的類文件中,。如果你修改foo的值,并且重新編譯(沒(méi)有刪除類文件),,javac任務(wù)就不會(huì)編譯類B,,因?yàn)樗脑次募认鄳?yīng)的類要舊,,因此舊的值將保持不變。即便用javac使用depend屬性也不能解決這個(gè)問(wèn)題,,因?yàn)镴ava編譯器的這個(gè)選擇是一種錯(cuò)誤,。Jikes的相關(guān)性檢查較好,但是你應(yīng)該重新構(gòu)建所有的類文件,,這樣才是最快的辦法,。

當(dāng)你在HTML中用樣式表時(shí)會(huì)遇到類似的問(wèn)題。style任務(wù)不檢查要使用樣式表的日期,。這樣的話,,如果你對(duì)那些文件進(jìn)行操作,該任務(wù)將不會(huì)生成目標(biāo)文件(通常是HTML文件),。你可以通過(guò)使用force屬性來(lái)強(qiáng)制性地生成文件,,但是這樣通常是效率極低的。在這種情況下,,通過(guò)下面的clean目標(biāo)可以刪除所生成的HTML文件(在doc屬性目錄中):

 <target name="clean">
   <delete dir="${tmp}"/>
   <mkdir dir="${tmp}"/>
   <delete><fileset dir="${doc}" includes="*.html"/></delete>
 </target>
                  

為解決這些相關(guān)性問(wèn)題,,當(dāng)你生成新版本的文件時(shí),應(yīng)該不時(shí)地運(yùn)行clean目標(biāo),。

接下來(lái):

在第二部分,,我們將討論一些更高級(jí)的Ant任務(wù),諸如從源代碼控制系統(tǒng)中檢查文件,、用標(biāo)記操縱數(shù)據(jù)庫(kù),、用JUnit運(yùn)行unit測(cè)試、部署工程以供測(cè)試或者部署生產(chǎn)服務(wù)器等,。

Michel Casabianca ([email protected]) 是In-Fusio的軟件工程師,。In-Fusio是一家為移動(dòng)用戶提供游戲服務(wù)的法國(guó)公司。同時(shí),,Michel Casabianca還是"XML Pocket Reference"一書(O‘Reilly出版, 2001年)的合著者,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多