Ant Task:Ant任務(執行多個構件檔案)

來源:互聯網
上載者:User

如果需要在一個構件檔案中通過Ant命令去執行另一個Ant項目,或者說要執行本項目的子項目的構件檔案。這時Ant這個核心任務就派上用場了。簡單地說Ant任務的作用就相當於在命令列通過Ant命令執行構件檔案。值得注意的是Ant任務依賴於target元素,需要在某個target元素中使用,不能在target元素外獨立使用。

Ant任務還可以實作類別似Java程式間的繼承關係,不過對於這個核心任務來說只繼承property元素和reference屬性。舉個例子說,項目A中包含通過Ant任務去執行的項目B,而項目B中需要用到項目A中的屬性C,那麼可以通過設定的Ant任務中的inheritAll屬性,使得在B項目中可以使用項目A中的屬性C。從另一方面看,這也符合XP(極限)編程中的細分功能的思想,可以把大的項目切分為幾分小項目,然後通過Ant工具進行整合。

4.1.1  Ant Task的屬性及功能

Ant任務包括antfile、dir、target、output、inheritAll、inheritRefs這些屬性,具體說明如下:

(1)antfile屬性:在Ant任務中antfile屬性的作用是指定要執行的構件檔案的名稱,可包含路徑資訊。例如,在projectA中執行projectB的構件檔案。projectA的構件檔案內容如下:

<?xml version="1.0"?>

<!-- 在projectA中執行projectB的構件檔案   -->

<project name="porjectA" default="callProjectB">

    <target name="callProjectB">

        <echo message="In projectA calling projectB"/>

        <ant antfile="subfile/projectB.xml" />

</target>

</project>

projectB存放於subfile目錄下,具體內容如下:

hamg<?xml version="1.0"?>

<project name="porjectB" default="init">

    <target name="init">

        <echo message="In projectB"/>

    </target>

</project>

如果要通過projectA運行projectB的構件檔案,那麼可以在命令列執行:ant –buildfile projectA.xml,執行結果4.1所示。

圖4.1  通過projectA運行projectB

從執行結果得知,antfile屬性的作用相當於在Ant命令中指定-buildfile subfile/projectB. xml選項,只不過Ant任務提供了更方便的功能。如果antfile屬性沒設定,那麼Ant任務會尋找名稱為build.xml的構件檔案。當然antfile屬性也可與dir屬性結合使用,antfile指定檔案名稱,dir屬性指定檔案所在的目錄。

(2)dir屬性:在Ant任務中dir屬性的作用是用於指定構件檔案所在的目錄。相當於指定了要執行的構件檔案的basedir屬性。在預設情況下如果dir屬性沒設定,那麼會以當前執行的構件檔案的根目錄作為Ant任務的根目錄。這個屬性設定後,被執行的構件檔案的basedir屬性將取dir屬性的值。下面把targetA.xml構件檔案改寫為通過dir屬性指定目錄以實現同樣的功能,具體的構件檔案內容如下:

<?xml version="1.0"?>

<project name="porjectA" default="callProjectB">

    <!-- //調用projectB.xml構件檔案  -->

    <target name="callProjectB">

        <echo message="In projectA calling projectB"/>

        <ant antfile="projectB.xml"  dir=” subfile” />

    </target>

</project>

(3)target屬性:在Ant任務中target屬性的作用是指定被執行的構件檔案中所要執行的target,如果target屬性沒有設定,那麼將會執行被調用的構件檔案中的預設target(也就是project元素中指定default值)。這個屬性相當於在命令列執行時指定要執行的target的選項。例如,在projectA1中調用projectB1,並執行projectB1中的target“target2”。編寫projectA1.xml構件檔案,內容如下:

<?xml version="1.0"?>

<project name="porjectA" default="callProjectB">

    <target name="callProjectB">

        <echo message="In projectA calling projectB"/>

         <!-- //通過ant 任務執行projectB.xml構件檔案,指定執行target2這個target  -->

        <ant antfile="subfile/projectB.xml" target=" target2"/>

    </target>

</project>

被調用的projectB.xml構件檔案的內容如下:

<?xml version="1.0"?>

<project name="porjectB" default="init">

    <target name="init">

        <echo message="In projectB"/>

    </target>

    <target name=”target2” >

        <echo message=”In projectB,execute target2” />

    </target>

</project>

然後在命令列執行ant –f projectA1.xml以查看Ant任務的執行效果,執行結果4.2所示。

圖4.2  項目調用結果

在執行結果中可看出,在targetA.xml中通過Ant任務執行了targetB.xml中的target2這個target。

(4)output屬性:在Ant任務中output屬性主要用於指定Ant工具執行時的資訊輸出,可定位到控制台或定位到檔案中。當輸出資訊到檔案中時,相當於在命令列指定-logfile<file>,-l<file>選項。如果指定了dir屬性,那麼被指定的輸出檔案的位置是相對於dir屬性指定的目錄的,當然也可以通過絕對路徑指定。例如,把projectA中的輸出資訊定位到out.log檔案,構件檔案的內容如下:

<?xml version="1.0"?>

<project name="porjectA" default="callProjectB">

    <target name="callProjectB">

        <echo message="In projectA calling projectB"/>

         <!-- //輸出資訊到out.log中  -- >

        <ant antfile="subfile/projectB.xml"  output="out.log"/>

    </target>

</project>

(5)inheritAll屬性:在Ant任務中inheritAll屬性用於指定被調用的構件檔案的project元素中可使用當前project元素中的屬性。這個屬性類似於Java程式中類的繼承關係。預設時inheritAll屬性取值為true。

(6)inheritRefs屬性:在Ant任務中,如果設定了inheritRefs屬性為true,那麼被調用的構件檔案中的project元素可引用當前project元素中的reference(參考)任務。

Reference任務的作用是把當前的屬性複製到被調用的Ant project中使用。References任務包含兩個屬性,如下:

  ● refid屬性:這個屬性代表當前project中的屬性id。

  ● torefid屬性:用於指定在被調用的project中的引用id。

Reference的使用例子如下:

<reference refid="path1" torefid="path2"/>

<!-- // 把當前project中的path1屬性傳遞給被調用的project中使用,

在被調用project中通過path2引用這個屬性。  -- >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.