Java主動化對象Ant的基本應用教程。本站提示廣大學習愛好者:(Java主動化對象Ant的基本應用教程)文章只能為提供參考,不一定能成為您想要的結果。以下是Java主動化對象Ant的基本應用教程正文
Ant 是甚麼?
Apache Ant 是一個基於Java 的生成對象。據最後的開創人 James Duncan Davidson 引見,這個對象的稱號是 another neat tool(另外一個整潔的對象) 的首字母縮寫。
Ant的感化:
生成對象在軟件開辟頂用來將源代碼和其他輸出文件轉換為可履行文件的情勢(也有能夠轉換為可裝置的產物映像情勢)。跟著運用法式的生成進程變得加倍龐雜,確保在每次生成時代都應用准確雷同的生成步調,同時完成盡量多的主動化,以便實時發生分歧的生成版本,這就變得加倍主要.
Ant的優勢:
Ant是一種基於Java的build對象。實際下去說,它有些相似於(Unix)C中的make ,但沒有make的缺點。今朝的最新版本為:Ant 1.8.4。 既然我們曾經有了make, gnumake, nmake, jam和其他的build對象為何還要要一種新的build對象呢?由於Ant的原作者在多種(硬件)平台上開辟軟件時,沒法忍耐這些對象的限制和未便。相似於make的對象實質上是基於shell(說話)的:他們盤算依附關系,然後履行敕令(這些敕令與你在敕令行敲的敕令沒太年夜差別)。這就意味著你可以很輕易地經由過程應用OS獨有的或編寫新的(敕令)法式擴大該對象;但是,這也意味著你將本身限制在了特定的OS,或特定的OS類型上,如Unix.
Ant就分歧了。與基於shell敕令的擴大形式分歧,Ant用Java的類來擴大。(用戶)不用編寫shell敕令,設置裝備擺設文件是基於XML的,經由過程挪用target樹,便可履行各類task。每一個task由完成了一個特定Task接口的對象來運轉。
Ant 界說生成文件之間的依附關系,它應用跨平台的 Java 類。應用 Ant,您可以或許編寫單個生成文件,這個生成文件在任何 Java 平台上都分歧地操作(由於 Ant 自己也是應用 Java 說話來完成的),這就是 Ant 最年夜的優勢
Ant生成文件分析:
Ant 沒有界說它本身的自界說語法;相反,它的生成文件是用 XML 編寫的。存在一組 Ant 可以或許懂得的預界說 XML 元素,並且還可以界說新的元從來擴大 Ant 的功效。每一個生成文件由單個 project 元素構成,該元素又包括一個或多個 target 元素。一個目的(target)是生成進程中已界說的一個步調,它履行隨意率性數目的操作,好比編譯一組源文件。而且這些操作自己是由其他公用義務標簽履行的然後這些義務將依據須要被分組到各個 target 元素中。一次生成進程所必須的一切操作可以放入單個 target 元素中,然則那樣會下降靈巧性。將那些操作劃分為邏輯生成步調,每一個步調包括在它本身的 target 元素中,如許平日更加可取。如許可以履行全體生成進程的零丁部門,卻紛歧定要履行其他部門。
例如,經由過程僅挪用某些目的,您可以編譯項目標源代碼,卻不用創立可裝置的項目文件
頂級 project 元素須要包括一個 default 屬性,假如在 Ant 被挪用時沒有指定目的,這個屬性將指定要履行的目的。然後須要應用 target 元從來界說該目的自己。
上面是一個最根本的生成文件:
<?xml version="1.0"?> <project default="init"> <target name="init"> </target> </project>
Ant根本應用方法:
1. 設置裝備擺設情況變量:
ANT_HOME: C:\ant-1.8 -----> Ant的裝置/解壓目次途徑
PATH後追加: C:\ant-1.8\bin ------>Ant中的BIN目次途徑
2. 確認情況變量設置裝備擺設能否勝利
翻開CMD窗口,然後輸出敕令: ant:
看到以下顯示:
因為Ant構建時須要默許有build.xml文件,是以有如上的提醒,至此,解釋Ant的情況曾經設置裝備擺設勝利.
3. 應用Ant創立一個名為HelloWorld的文件夾:
起首須要編纂build.xml:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span ><mkdir dir="HelloWorld"></span> </target> </project>
然後切換到build.xml文件地點的目次,輸出ant,如有以下提醒,則創立文件夾勝利:
(init 部門相當於 日記的輸入)
4. 也能夠應用ant創立多級嵌套的文件目次
只須要在build.xml文件中停止修正:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span > <mkdir dir="HelloWorld\a\b\c"/></span> </target> </project>
5. 刪除如上的多級目次:
<?xml version="1.0"?> <project default="init"> <target name="init"> <span ><delete dir="HelloWorld"/></span> </target> </project>
留意:此處途徑只用輸出第一流目次途徑,這也恰是ANT對象的壯大的地方:
Java中假如要刪除目次,除非該目次為空才可以刪除,不然就要慢慢停止刪除.
而應用Ant對象,則可以直接刪除含有子目次的文件夾.
再看一個示例XML文件:
<?xml version="1.0"?> <project default="init" name="Project"> <description> A simple project introducing the use of descriptive tags in Ant build files. </description> <!-- XML comments can also be used --> <target name="init" description="Initialize Argon database"> <!-- perform initialization steps here --> </target> </project>
可以看出,XML 正文可使用在全部生成文件中以進步清楚性。並且,Ant 界說了它本身的description 元素和 description 屬性,它們可用於供給更構造化的正文。
Ant屬性:
Ant 中的屬性相似編程說話中的變量,它們都具著名稱和值。但是與平日的變量分歧,一經設置,Ant 中的屬性就弗成更改;它們是弗成變的,就像 Java 說話中的 String 對象。 這起先看來仿佛很無限制性,但如許是為了遵守 Ant 的簡略准繩: 究竟,它是一個生成對象,而不是一種編程說話。假如測驗考試給某個現有屬性付與一個新的值,這不會被看做是一個毛病,然則該屬性依然會保存其現有值
界說與應用屬性:
<property name="metal“ value="beryllium"/>
為了在生成文件的其他部門援用這個屬性,應用以下語法:
${metal}
例如,為了應用如許一個值,它是另外一個屬性的值的構成部門,將標簽寫成上面如許
<property name="metal-database" value="${metal}.db"/>
location屬性:
屬性常常用於援用文件體系上的文件或目次,然則關於應用分歧途徑分隔符(例如,/ 與 \)的平台來講,如許能夠在逾越分歧平台時招致成績。Ant 的 location 屬性專門設計用於以平台有關的方法包括文件體系途徑。像上面如許應用 location 來取代value:
<property name="database-file" location="archive/databases/${metal}.db"/>
用於 location 屬性的途徑分隔字符將被轉換為以後平台的准確格局;並且因為文件名是絕對的,它被以為是絕對於項目標基目次。我們異樣可以輕易地寫為上面如許:
<property name="database-file" location="archive\databases\${metal}.db"/>
這個標簽的兩個版本都邑在分歧的平台具有雷同的行動.
界說依附關系:
生成一個項目普通須要很多步調 —— 例如起首要編譯源代碼,然後將它打包為 Java 歸檔文件
(Java Archive File,JAR)。這個中很多步調都具有清晰界說的次序 —— 例如,在編譯器從源代碼生成類文件之前,您不克不及打包類文件。與次序指定 target 所分歧的是,Ant 采取一種更靈巧的辦法來界說 依附關系 。每一個目的的界說根據的是在它可以或許履行之前必需完成的其他一切目的。這是應用 target 元素的 depends 屬性來完成的
<target name="init"/> <target name="preprocess" depends="init"/> <target name="compile" depends="init,preprocess"/> <target name="package" depends="compile"/>
這類辦法許可您履行項目任何階段的生成進程;Ant 會起首履行已界說的先決階段。在下面的例子中,假如讓 Ant 完成 compile 步調,它將斷定出須要起首履行 init 和preprocess 這兩個目的。init 目的不依附其他任何目的,是以它將起首被履行。然後 Ant 檢討 preprocesstarget,發明它依附 init 目的;因為曾經履行了後者,Ant 不會再次履行它,因此開端履行 preprocess 目的。最初可以履行 compile 義務自己。
留意目的湧現在生成文件中的次序其實不主要:履行次序是由depends 屬性獨一肯定的。