




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ant命令總結(jié)范文 ant命令總結(jié)1Ant是什么?Apache Ant是一個基于Java的生成工具。 生成工具在軟件開發(fā)中用來將源代碼和其他輸入文件轉(zhuǎn)換為可執(zhí)行文件的形式(也有可能轉(zhuǎn)換為可安裝的產(chǎn)品映像形式)。 隨著應(yīng)用程序的生成過程變得更加復雜,確保在每次生成期間都使用精確相同的生成步驟,同時實現(xiàn)盡可能多的自動化,以便及時產(chǎn)生一致的生成版本2下載、安裝Ant安裝Ant下載.zip文件,解壓縮到c:ant1.3(后面引用為%ANT_HOME%)2.1在你運行Ant之前需要做一些配置工作。 ?將bin目錄加入PATH環(huán)境變量。 ?設(shè)定ANT_HOME環(huán)境變量,指向你安裝Ant的目錄。 在一些OS上,Ant的腳本可以猜測ANT_HOME(Unix和Windos NT/2000)但最好不要依賴這一特性。 ?可選地,設(shè)定JAVA_HOME環(huán)境變量(參考下面的高級小節(jié)),該變量應(yīng)該指向你安裝JDK的目錄。 注意不要將Ant的ant.jar文件放到JDK/JRE的lib/ext目錄下。 Ant是個應(yīng)用程序,而lib/ext目錄是為JDK擴展使用的(如JCE,JSSE擴展)。 而且通過擴展裝入的類會有安全方面的限制。 2.2運行Ant運行Ant非常簡單,當你正確地安裝Ant后,只要輸入ant就可以了。 ?沒有指定任何參數(shù)時,Ant會在當前目錄下查詢build.xml文件。 如果找到了就用該文件作為buildfile。 如果你用-find選項。 Ant就會在上級目錄中尋找buildfile,直至到達文件系統(tǒng)的根。 要想讓Ant使用其他的buildfile,可以用參數(shù)-buildfile file,這里file指定了你想使用的buildfile。 ?可以指定執(zhí)行一個或多個target。 當省略target時,Ant使用標簽的default屬性所指定的target。 命令行選項總結(jié)antoptionstargettarget2target3.Options:-help printthis message-projecthelp printproject helpinformation-version printthe versioninformation andexit-quiet beextra quiet-verbose beextra verbose-debug printdebugging information-emacs producelogging informationwithout adornments-logfile fileuse givenfile forlog output-logger classnamethe classthat isto performlogging-listener classnameadd aninstance ofclass asa projectlistener-buildfile fileuse specifiedbuildfile-find filesearch forbuildfile towardsthe rootof thefilesystem anduse thefirst onefound-Dproperty=value setproperty tovalue例子ant使用當前目錄下的build.xml運行Ant,執(zhí)行缺省的target。 ant-buildfile test.xml使用當前目錄下的test.xml運行Ant,執(zhí)行缺省的target。 ant-buildfile test.xml dist使用當前目錄下的test.xml運行Ant,執(zhí)行一個叫做dist的target。 ant-buildfile test.xml-Dbuild=build/classes dist使用當前目錄下的test.xml運行Ant,執(zhí)行一個叫做dist的target,并設(shè)定build屬性的值為build/classes。 3編寫build.xml Ant的buildfile是用XML寫的。 每個buildfile含有一個project。 buildfile中每個task元素可以有一個id屬性,可以用這個id值引用指定的任務(wù)。 這個值必須是唯一的。 (詳情請參考下面的Task小節(jié))3.1Projects project有下面的屬性Attribute DescriptionRequired name項目名稱.No default當沒有指定target時使用的缺省target Yesbasedir用于計算所有其他路徑的基路徑。 該屬性可以被basedir property覆蓋。 當覆蓋時,該屬性被忽略。 如果屬性和basedir property都沒有設(shè)定,就使用buildfile文件的父目錄。 No項目的描述以一個頂級的元素的形式出現(xiàn)(參看description小節(jié))。 一個項目可以定義一個或多個target。 一個target是一系列你想要執(zhí)行的。 執(zhí)行Ant時,你可以選擇執(zhí)行那個target。 當沒有給定target時,使用project的default屬性所確定的target。 3.2Targets一個target可以依賴于其他的target。 例如,你可能會有一個target用于編譯程序,一個target用于生成可執(zhí)行文件。 你在生成可執(zhí)行文件之前必須先編譯通過,所以生成可執(zhí)行文件的target依賴于編譯target。 Ant會處理這種依賴關(guān)系。 然而,應(yīng)當注意到,Ant的depends屬性只指定了target應(yīng)該被執(zhí)行的順序如果被依賴的target無法運行,這種depends對于指定了依賴關(guān)系的target就沒有影響。 Ant會依照depends屬性中target出現(xiàn)的順序(從左到右)依次執(zhí)行每個target。 然而,要記住的是只要某個target依賴于一個target,后者就會被先執(zhí)行。 假定我們要執(zhí)行target D。 從它的依賴屬性來看,你可能認為先執(zhí)行C,然后B,最后A被執(zhí)行。 錯了,C依賴于B,B依賴于A,所以先執(zhí)行A,然后B,然后C,最后D被執(zhí)行。 一個target只能被執(zhí)行一次,即時有多個target依賴于它(看上面的例子)。 如果(或如果不)某些屬性被設(shè)定,才執(zhí)行某個target。 這樣,允許根據(jù)系統(tǒng)的狀態(tài)(java version,OS,命令行屬性定義等等)來更好地控制build的過程。 要想讓一個target這樣做,你就應(yīng)該在target元素中,加入if(或unless)屬性,帶上target因該有所判斷的屬性。 例如如果沒有if或unless屬性,target總會被執(zhí)行。 可選的description屬性可用來提供關(guān)于target的一行描述,這些描述可由-projecthelp命令行選項輸出。 將你的tstamp task在一個所謂的初始化target是很好的做法,其他的target依賴這個初始化target。 要確保初始化target是出現(xiàn)在其他target依賴表中的第一個target。 在本手冊中大多數(shù)的初始化target的名字是init。 target有下面的屬性Attribute DescriptionRequired nametarget的名字Yes depends用逗號分隔的target的名字列表,也就是依賴表。 No if執(zhí)行target所需要設(shè)定的屬性名。 No unless執(zhí)行target需要清除設(shè)定的屬性名。 No description關(guān)于target功能的簡短描述。 No3.3Tasks一個task是一段可執(zhí)行的代碼。 一個task可以有多個屬性(如果你愿意的話,可以將其稱之為變量)。 屬性只可能包含對property的引用。 這些引用會在task執(zhí)行前被解析。 下面是Task的一般構(gòu)造形式這里name是task的名字,attributeN是屬性名,valueN是屬性值。 有一套內(nèi)置的(built-in)task,以及一些可選task,但你也可以編寫自己的task。 所有的task都有一個task名字屬性。 Ant用屬性值來產(chǎn)生日志信息。 可以給task賦一個id屬性這里taskname是task的名字,而taskID是這個task的唯一標識符。 通過這個標識符,你可以在腳本中引用相應(yīng)的task。 例如,在腳本中你可以這樣task1.setFoo(bar);設(shè)定某個task實例的foo屬性。 在另一個task中(用java編寫),你可以利用下面的語句存取相應(yīng)的實例。 project.getReference(task1).注意1如果task1還沒有運行,就不會被生效(例如不設(shè)定屬性),如果你在隨后配置它,你所作的一切都會被覆蓋。 注意2未來的Ant版本可能不會兼容這里所提的屬性,因為很有可能根本沒有task實例,只有proxies。 3.4Properties一個project可以有很多的properties。 可以在buildfile中用property task來設(shè)定,或在Ant之外設(shè)定。 一個property有一個名字和一個值。 property可用于task的屬性值。 這是通過將屬性名放在$和之間并放在屬性值的位置來實現(xiàn)的。 例如如果有一個property builddir的值是build,這個property就可用于屬性值$builddir/classes。 這個值就可被解析為build/classes。 內(nèi)置屬性如果你使用了task定義了所有的系統(tǒng)屬性,Ant允許你使用這些屬性。 例如,$對應(yīng)操作系統(tǒng)的名字。 要想得到系統(tǒng)屬性的列表可參考the Javadocof System.getProperties。 除了Java的系統(tǒng)屬性,Ant還定義了一些自己的內(nèi)置屬性basedir project基目錄的絕對路徑(與的basedir屬性一樣)。 ant.file buildfile的絕對路徑。 ant.version Ant的版本。 當前執(zhí)行的project的名字;由的name屬性設(shè)定.ant.java.version Ant檢測到的JVM的版本;目前的值有1.1,1.2,1.3and1.4.例子3.5Path-like Structures你可以用:和;作為分隔符,指定類似PATH和CLASSPATH的引用。 Ant會把分隔符轉(zhuǎn)換為當前系統(tǒng)所用的分隔符。 當需要指定類似路徑的值時,可以使用嵌套元素。 一般的形式是location屬性指定了相對于project基目錄的一個文件和目錄,而path屬性接受逗號或分號分隔的一個位置列表。 path屬性一般用作預定義的路徑其他情況下,應(yīng)該用多個location屬性。 為簡潔起見,classpath標簽支持自己的path和location屬性。 所以可以被簡寫作也可通過元素指定路徑。 構(gòu)成一個fileset的多個文件加入path-like structure的順序是未定的。 上面的例子構(gòu)造了一個路徑值包括$classpath的路徑,跟著lib目錄下的所有jar文件,接著是classes目錄。 如果你想在多個task中使用相同的path-like structure,你可以用元素定義他們(與target同級),然后通過id屬性引用參考Referencs例子。 path-like structure可能包括對另一個path-like structurede的引用(通過嵌套元素)前面所提的關(guān)于的簡潔寫法對于也是有效的,如可寫成命令行變量有些task可接受參數(shù),并將其傳遞給另一個進程。 為了能在變量中包含空格字符,可使用嵌套的arg元素。 Attribute DescriptionRequired value一個命令行變量;可包含空格字符。 只能用一個line空格分隔的命令行變量列表。 file作為命令行變量的文件名;會被文件的絕對名替代。 path一個作為單個命令行變量的path-like的字符串;或作為分隔符,Ant會將其轉(zhuǎn)變?yōu)樘囟ㄆ脚_的分隔符。 例子是一個含有空格的單個的命令行變量。 是兩個空格分隔的命令行變量。 是一個命令行變量,其值在DOS系統(tǒng)上為dir;dir2;dir3;在Unix系統(tǒng)上為/dir:/dir2:/dir3。 References buildfile元素的id屬性可用來引用這些元素。 如果你需要一遍遍的復制相同的XML代碼塊,這一屬性就很有用如多次使用結(jié)構(gòu)。 下面的例子可以寫成如下形式所有使用PatternSets,FileSets或path-like structures嵌套元素的task也接受這種類型的引用。 4.1File(Directory)類4.1.1Mkdir?創(chuàng)建一個目錄,如果他的父目錄不存在,也會被同時創(chuàng)建。 ?例子?說明如果build不存在,也會被同時創(chuàng)建4.1.2Copy?拷貝一個(組)文件、目錄?例子1.拷貝單個的文件2.拷貝單個的文件到指定目錄下3.拷貝一個目錄到另外一個目錄下4.拷貝一批文件到指定目錄下5.拷貝一批文件到指定目錄下,將文件名后增加。 Bak后綴6.拷貝一組文件到指定目錄下,替換其中的標簽內(nèi)容4.1.3Delete?刪除一個(組)文件或者目錄?例子1.刪除一個文件2.刪除指定目錄及其子目錄3.刪除指定的一組文件4.刪除指定目錄及其子目錄,包括他自己4.1.4Move?移動或重命名一個(組)文件、目錄?例子1.移動或重命名一個文件2.移動或重命名一個文件到另一個文件夾下面3.將一個目錄移到另外一個目錄下4.將一組文件移動到另外的目錄下5.移動文件過程中增加。 Bak后綴4.2Java相關(guān)4.2.1Javac?編譯java原代碼?例子1.編譯$src目錄及其子目錄下的所有。 Java文件,。 Class文件將放在$build指定的目錄下,classpath表示需要用到的類文件或者目錄,debug設(shè)置為on表示輸出debug信息2.編譯$src和$src2目錄及其子目錄下的所有。 Java文件,但是package/p1/*,mypackage/p2/*將被編譯,而mypackage/p1/testpackage/*將不會被編譯。 Class文件將放在$build指定的目錄下,classpath表示需要用到的類文件或者目錄,debug設(shè)置為on表示輸出debug信息3.路徑是在property中定義的4.2.2java?執(zhí)行指定的java類?例子1.classname中指定要執(zhí)行的類,classpath設(shè)定要使用的環(huán)境變量2.4.3打包相關(guān)4.3.1jar?將一組文件打包?例子1.將$build/classes下面的所有文件打包到$dist/lib/app.jar中2.將$build/classes下面的所有文件打包到$dist/lib/app.jar中,但是包括mypackage/test所有文件不包括所有的Test.class3.manifest屬性指定自己的META-INF/MANIFEST.MF文件,而不是由系統(tǒng)生成4.3.2war?對Jar的擴展,用于打包Web應(yīng)用?例子?假設(shè)我們的文件目錄如下thirdparty/libs/jdbc1.jar thirdparty/libs/jdbc2.jar build/main/myco/myapp/Servlet.class src/metadata/myapp.xml src/html/myapp/index.html src/jsp/myapp/front.jsp src/graphics/images/gifs/small/logo.gif src/graphics/images/gifs/large/logo.gif?下面是我們的任務(wù)的內(nèi)容?完成后的結(jié)果WEB-INF/web.xml WEB-INF/lib/jdbc2.jar WEB-INF/classes/myco/myapp/Servlet.class META-INF/MANIFEST.MF index.html front.jsp images/small/logo.gif images/large/logo.gif4.3.3ear?用于打包企業(yè)應(yīng)用?例子4.4時間戳在生成環(huán)境中使用當前時間和日期,以某種方式標記某個生成任務(wù)的輸出,以便記錄它是何時生成的,這經(jīng)常是可取的。 這可能涉及一個文件,以便插入一個字符串來指定日期和時間,或?qū)⑦@個信息合并到JAR或zip文件的文件名中。 這種需要是通過簡單但是非常有用的tstamp任務(wù)來解決的。 這個任務(wù)通常在某次生成過程開始時調(diào)用,比如在一個init目標中。 這個任務(wù)不需要屬性,許多情況下只需就足夠了。 tstamp不產(chǎn)生任何輸出;相反,它根據(jù)當前系統(tǒng)時間和日期設(shè)置Ant屬性。 下面是tstamp設(shè)置的一些屬性、對每個屬性的說明,以及這些屬性可被設(shè)置到的值的例子屬性說明例子DSTAMP設(shè)置為當前日期,默認格式為yyyymmddxx1217TSTAMP設(shè)置為當前時間,默認格式為hhmm1603TODAY設(shè)置為當前日期,帶完整的月份xx年12月17日例如,在前一小節(jié)中,我們按如下方式創(chuàng)建了一個JAR文件在調(diào)用tstamp任務(wù)之后,我們能夠根據(jù)日期命名該JAR文件,如下所示因此,如果這個任務(wù)在xx年12月17日調(diào)用,該JAR文件將被命名為package-xx1217.jar。 還可以配置tstamp任務(wù)來設(shè)置不同的屬性,應(yīng)用一個當前時間之前或之后的時間偏移,或以不同的方式格式化該字符串。 所有這些都是使用一個嵌套的format元素來完成的,如下所示上面的清單將OFFSET_TIME屬性設(shè)置為距離當前時間10分鐘之后的小時數(shù)、分鐘數(shù)和秒數(shù)。 用于定義格式字符串的字符與java.text.SimpleDateFormat類所定義的那些格式字符相同4.5執(zhí)行SQL語句?通過jdbc執(zhí)行SQL語句?例子1.2.只有在oracle、版本是8.1的時候才執(zhí)行4.6發(fā)送郵件?使用SMTP服務(wù)器發(fā)送郵件?例子The$buildnamenightly buildhas pleted?mailhost SMTP服務(wù)器地址?mailport服務(wù)器端口?subject主題?from發(fā)送人地址?to接受人地址?message發(fā)送的消息?fileset設(shè)置附件=在ANT出現(xiàn)之前,編譯和部署Java應(yīng)用需要使用包括特定平臺的腳本、Make文件、不同的IDE以及手工操作等組成的大雜燴。 現(xiàn)在,幾乎所有的開源Java項目都在使用Ant,許多公司的開發(fā)項目也在使用Ant。 Ant的大量使用,也自然帶來了對總結(jié)Ant最佳實踐的迫切需求。 本文總結(jié)了我喜好的Ant最佳實踐,很多是從親身經(jīng)歷的項目錯誤,或從其他開發(fā)者的“恐怖”故事中得到的靈感的。 比如,有人告訴我有個項目將XDoclet生成的代碼放入鎖定文件的版本控制工具中。 單開發(fā)者修改源代碼時,他必須記住手工檢出(Check out)并鎖定所有將要重生成的文件。 然后,手工運行代碼生成器,當他能夠讓Ant編譯代碼時,這一方法還存在一些問題生成的代碼無法存儲在版本控制系統(tǒng)中Ant(本案例中是Xdoclet)應(yīng)該自動確定下一次構(gòu)建涉及的源文件,而不應(yīng)由程序員人工確定。 Ant的構(gòu)建文件應(yīng)該定義好正確的任務(wù)依賴關(guān)系,這樣程序員不必按照特定順序調(diào)用任務(wù)。 當我開始一個新項目時,我首先編寫Ant構(gòu)建文件。 文件定義構(gòu)建的過程,并為團隊中的每個程序員都使用。 本文所有的最佳實踐假設(shè)Ant構(gòu)建文件是一個必須精心編寫的重要文件,它應(yīng)在版本控制系統(tǒng)中得到維護,并定期進行重構(gòu)。 下面是我的十五大Ant最佳實踐。 1.采用一致的編碼規(guī)范Ant用戶不管是喜歡還是痛恨XML構(gòu)建文件的語法,都愿意跳進這一迷人的爭論中。 讓我們先看一些保持XML構(gòu)建文件簡潔的方法。 首先,也是最重要的,化費時間格式化你的XML讓它看上去很清晰。 不過XML是否美觀,Ant都可以工作。 但是丑陋的XML很難讀懂。 倘若你在任務(wù)之間留出空行,有規(guī)則的縮進,每行文字不超過90列,那么XML令人驚訝的易讀。 再加上好的器或IDE高亮相應(yīng)的語句,你就不會有如何閱讀的麻煩。 同樣,精選有意義明確、容易讀懂的詞匯來命名任務(wù)和屬性。 比如,dir.reports就比rpts好。 并不需要特定的編碼規(guī)范,只要有一種規(guī)范并堅持使用就好。 2.將build.xml放在項目根目錄中Ant構(gòu)建文件build.xml可以放在如何位置,但是放在項目頂層目錄中可以保持項目簡潔。 這是最普遍的規(guī)范,使開發(fā)者能夠在根目錄找到它。 同時,也能夠容易了解項目中不同目錄之間的邏輯關(guān)系。 以下是一個典型的項目層次root dir|build.xml+-src+-lib(包含第三方JAR包)+-build(由build任務(wù)生成)+-dist(由build任務(wù)生成)當build.xml在頂級目錄時,倘若你在項目某個子目錄中,只要輸入ant-find pile命令,不需要改變工作目錄就能夠以命令行方式編譯代碼。 參數(shù)-find告訴Ant尋找存在于上級目錄中的build.xml并執(zhí)行。 3.使用單一構(gòu)建文件有人喜歡將一個大項目分解到幾個小的構(gòu)建文件,每個構(gòu)建文件分擔整個構(gòu)建過程的一小部分工作。 但是應(yīng)該認識到,將構(gòu)建文件分割會增加對整個構(gòu)建過程的理解難度。 要注意在單一構(gòu)建文件能夠清楚表現(xiàn)構(gòu)建層次的情況下,不要過工程化(over-engineer)。 即使你把項目劃分為多個構(gòu)建文件,也應(yīng)使程序員能夠在項目根目錄下找到核心build.xml。 盡管該文件只是將實際構(gòu)建工作委派給下級構(gòu)建文件,也應(yīng)保證該文件可用。 4.提供良好的幫助說明應(yīng)盡量使構(gòu)建文件自文檔化。 增加任務(wù)描述是最簡單的方法。 當你輸入ant-projecthelp時,你就可以看到帶有描述的任務(wù)清單。 比如,你可以這樣定義任務(wù)最簡單的規(guī)則是對所有你希望程序員通過命令行直接調(diào)用的任務(wù)都加上描述。 對于一般用來執(zhí)行中間處理過程的內(nèi)部任務(wù),比如生成代碼或建立輸出目錄等,就無法使用描述屬性。 這時,可以通過在構(gòu)建文件中加入XML注釋來處理。 或者專門定義一個help任務(wù),當程序員輸入ant help時來顯示詳細的使用說明。 Detailed help.5.提供清空任務(wù)每個構(gòu)建文件都應(yīng)包含一個清空任務(wù),刪除所有生成的文件和目錄,使系統(tǒng)回到構(gòu)建文件執(zhí)行前的初始狀態(tài)。 執(zhí)行清空任務(wù)后還存在的文件應(yīng)處在版本控制系統(tǒng)的管理下。 比如除非是在產(chǎn)生整個系統(tǒng)版本的特殊任務(wù)中,否則不要自動調(diào)用clean任務(wù)。 當程序員僅僅執(zhí)行編譯任務(wù)或其他任務(wù)時,他們不需要構(gòu)建文件事先執(zhí)行即令人討厭有沒有必要的清空任務(wù)。 要相信程序員能夠確定何時需要清空所有文件。 6.使用ANT管理任務(wù)從屬關(guān)系假設(shè)你的應(yīng)用由Swing GUI組件、Web界面、EJB層和公共應(yīng)用代碼組成。 在大型系統(tǒng)中,你需要清晰地定義Java包屬于系統(tǒng)的哪一層。 否則如何一點修改都要重新編譯成千上百個文件。 任務(wù)從屬關(guān)系管理差會導致過度復雜而脆弱的系統(tǒng)。 改變GUI面板的設(shè)計不應(yīng)造成Servlet和EJB的重編譯。 當系統(tǒng)變得龐大后,稍不注意就可能將依賴于客戶端的代碼引入到服務(wù)端。 這是因為IDE在編譯文件時使用單一的classpath。 Ant讓你更有效地控制構(gòu)建活動。 設(shè)計你的構(gòu)建文件編譯大型項目的步驟首先,編譯公共應(yīng)用代碼,將編譯結(jié)果打成JAR包文件。 然后,編譯上一層的項目代碼,編譯時依靠第一步產(chǎn)生的JAR文件。 不斷重復這一過程,直到最高層的代碼編譯完成。 分步構(gòu)建強化了任務(wù)從屬關(guān)系管理。 如果你工作在底層Java框架上,引用高層的GUI模板組件,這時代碼不需要編譯。 這是由于構(gòu)建文件在編譯底層框架時,在源路徑中沒有包含高層GUI面板組件的代碼。 7.定義并重用文件路徑如果文件路徑在一個地方集中定義,并在整個構(gòu)建文件中得到重用,那么構(gòu)建文件更易于理解。 以下是這樣做的一個例子.etc當項目不斷增長,構(gòu)建日益復雜時,這一技術(shù)越發(fā)體現(xiàn)出其價值。 你可能為編譯不同層次的應(yīng)用定義各自的文件路徑,比如運行單元測試的、運行應(yīng)用程序的、運行Xdoclet的、生成JavaDocs的等等不同路徑。 這種組件化路徑定義的方法比為每個任務(wù)單獨定義路徑要優(yōu)越得多。 否則,很容易丟失任務(wù)任務(wù)從屬關(guān)系的軌跡。 8.定義恰當?shù)娜蝿?wù)參數(shù)關(guān)系假設(shè)dist任務(wù)從屬于jar任務(wù),那么哪個任務(wù)從屬于pile任務(wù),哪個任務(wù)從屬于prepare任務(wù)呢?Ant構(gòu)建文件最終定義了任務(wù)的從屬關(guān)系圖,它必須被仔細地定義和維護。 應(yīng)該定期檢查任務(wù)的從屬關(guān)系以保證構(gòu)建工作得到正確執(zhí)行。 大的構(gòu)建文件隨著時間推移趨向于增加更多的任務(wù),所以到最后由于不必要的從屬關(guān)系導致構(gòu)建工作非常困難。 比如,你可能發(fā)現(xiàn)在程序員只是需要編譯一些沒有使用EJB的GUI代碼時,重新生成EJB代碼。 以“優(yōu)化”的名義忽略任務(wù)的從屬關(guān)系是另一種常見的錯誤。 這種錯誤迫使程序員為了得到恰當?shù)慕Y(jié)果必須記住并按照特定的順序調(diào)用一串任務(wù)。 更好的做法是提供描述清晰的公共任務(wù),這些任務(wù)包含正確的任務(wù)從屬關(guān)系;另外提供一套“專家”任務(wù)讓你能夠手工執(zhí)行個別的構(gòu)建步驟,這些任務(wù)不提供完整的構(gòu)建過程,但是讓那些專家在快速而惱人的編碼期間跳過某些步驟9.使用配置屬性任何需要配置或可能發(fā)生變化的信息都應(yīng)作為Ant屬性定義下來。 對于在構(gòu)建文件中多次出現(xiàn)的值也同樣處理。 屬性既可以在構(gòu)建文件頭部定義,也可以為了更好的靈活性而在單獨的屬性文件中定義。 以下是在構(gòu)建文件中定義屬性的樣式etc.或者你可以使用屬性文件etc.在屬性文件perties中:dir.build=builddir.src=srcjdom.home=./java-tools/jdom-b8jdom.jar=jdom.jarjdom.jar.withpath=$jdom.home/build/$jdom.jar用一個獨立的文件定義屬性是有好處的,它可以清晰地定義構(gòu)建中的可配置部分。 另外,在開發(fā)者工作在不同操作系統(tǒng)的情況下,你可以在不同的平臺上提供該文件的不同版本。 10.保持構(gòu)建過程獨立為了最大限度的擴展性,不要應(yīng)用外部路徑和庫文件。 最重要的是不要依賴于程序員的CLASSPATH設(shè)置。 取而代之的是,在構(gòu)建文件中使用相對路徑并定義自己的路徑。 如果你引用了絕對路徑如C:javatools,其他開發(fā)者未必使用與你相同的目錄結(jié)構(gòu),所以就無法使用你的構(gòu)建文件如果你部署開發(fā)源碼項目,應(yīng)該提供包括所有需要的JAR文件的發(fā)行版本,當然是在遵守許可協(xié)議的基礎(chǔ)上。 對于內(nèi)部項目,相關(guān)的JAR文件都應(yīng)在版本控制系統(tǒng)的管理中,并撿出到大家都知道的位置。 當你不得不應(yīng)用外部路徑時,應(yīng)將路徑定義為屬性。 使程序員能夠涌適合他們自己的機器的參數(shù)重載這些屬性。 你也可以使用以下語法引用環(huán)境變量11.使用版本控制系統(tǒng)構(gòu)建文件是一個重要的文件,應(yīng)該象代碼一樣進行版本控制。 當你標記你的代碼時,也應(yīng)用同樣的標簽標記構(gòu)建文件。 這樣當你需要回溯構(gòu)建舊版本的軟件時,能夠使用相對應(yīng)的舊版本構(gòu)建文件。 除構(gòu)建文件之外,你還應(yīng)在版本控制中維護第三方JAR文件。 同樣,這使你能夠重新構(gòu)建舊版本的軟件。 這也能夠更容易保證所有開發(fā)者擁有一致的JAR文件,因為他們都是同構(gòu)建文件一起從版本控制系統(tǒng)中撿出的。 通常應(yīng)避免在版本控制系統(tǒng)中存放構(gòu)建輸出品。 倘若你的源代碼很好地得到了版本控制,那么通過構(gòu)建過程你能夠重新生成任何版本的產(chǎn)品。 12.把Ant作為“最小公分母”假設(shè)你的開發(fā)團隊使用IDE,為什么要為程序員通過點擊圖標就能夠構(gòu)建整個應(yīng)用而煩惱呢?IDE的問題在團隊中是一個關(guān)于一致性和重現(xiàn)性的問題。 幾乎所有的IDE設(shè)計初衷都是為了提高程序員的個人生產(chǎn)率,而不是開發(fā)團隊的持續(xù)構(gòu)建。 典型的IDE要求每個程序員定義自己的項目文件。 程序員可能擁有不同的目錄結(jié)構(gòu),可能使用不同版本的庫文件,還可能工作在不同的平臺上。 這將導致出現(xiàn)這種情況在A那里運行良好的代碼,到B那里就無法運行。 不管你的開發(fā)團隊使用何種IDE,一定要建立所有程序員都能夠使用的Ant構(gòu)建文件。 要建立一個程序員在將新代碼提交版本控制系統(tǒng)前必須執(zhí)行Ant構(gòu)建文件的規(guī)則。 這將確保代碼是經(jīng)過同一個Ant構(gòu)建文件構(gòu)建的。 當出現(xiàn)問題時,要使用項目標準的Ant構(gòu)建文件,而不是通過某個IDE來執(zhí)行一個干凈的構(gòu)建。 程序員可以自由選擇任何他們習慣使用的IDE。 但是A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南省名校2021年中考語文模擬試卷(含答案)
- 斷卡宣傳培訓
- 資產(chǎn)管理培訓會
- 腫瘤患者的常見癥狀護理
- 教育培訓教學課件
- 幼兒園教養(yǎng)員培訓
- 幼師食品安全知識培訓內(nèi)容
- 配電工安全培訓課件
- 中學寒假安全教育
- 民政高齡津貼培訓課件
- 泉州水務(wù)集團有限公司招聘考試真題2024
- 東航客運崗位面試題目及答案
- 《貝聿銘建筑設(shè)計》課件
- 三級營養(yǎng)師考試復習重點題(附答案)
- 2025裝配式混凝土居住建筑首個標準層段聯(lián)合驗收規(guī)程
- 四年級數(shù)學下冊 六 運算律第4課時 乘法的分配律教學設(shè)計 蘇教版
- 2025年04月廣東云浮市郁南縣東壩鎮(zhèn)退役軍人服務(wù)站專職工作人員公開招聘1人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2024年河南洛陽文旅集團財務(wù)崗位招聘筆試真題
- (高清版)DB12∕T 804-2018 口腔綜合治療臺用水微生物標準
- 2025年(四川)公需科目(心理健康與職業(yè)發(fā)展主題)題庫及答案
- 健康中國戰(zhàn)略下的體育產(chǎn)業(yè)發(fā)展方向
評論
0/150
提交評論