2011-02-19 83 views
1

我有一個頂級螞蟻項目和它下面的許多子項目。螞蟻大項目。如何執行公共輸出目錄結構 - 包括,導入和inhertAll = false?

./build.xml 
./datamodel_src/src/build.xml 
./datamodel_src/src/module1/build.xml 
./datamodel_src/src/module2/build.xml 
./infrastructure_src/src/build.xml 
./interfaces_src/src/build.xml 

每個子項目,我想執行一個公共的輸出目錄結構。項目將有一個工作區域,每個子項目都有自己的工作區域。每個子項目都應在子項目的工作區域下創建工件(庫,文檔,類等)。

所以輸出會像

c:/sandbox/mainprojectworkarea/subprojectworkarea/lib 
c:/sandbox/mainprojectworkarea/subprojectworkarea/docs 
c:/sandbox/mainprojectworkarea/subprojectworkarea/classes 

一些事目前我做如下。

頂層的build.xml就像下面

<project name="toplevelproject" default="compile" basedir="."> 
    <target name="compile"> 
     <ant dir="infrastructure_src/src" /> 
     <ant dir="interfaces_src/src " /> <!--does not work--> 
     <ant dir="datamodel_src/src inhertAll=false" /> <!--works--> 
    </target> 
</project> 

common.xml就像下面

<property environment="env" /> 
<property name="project.sandbox" value="${env.BUILD_HOME}/sandbox" /> 
<property name="sandbox" value="${project.sandbox}" /> 
<property name="pwa" value="${sandbox}/pwa" /> 
<property name="wa" value="${pwa}/${ant.project.name}" /> 
<property name="build" value="${wa}/build" /> 
<property name="lib" value="${wa}/lib" /> 
<property name="docs" value="${wa}/docs" /> 
<property name="exports" value="${wa}/exports" /> 

這是 「包含」 到所有項目。例如, 「datamodel_src/src目錄/ build.xml文件」 就像下面

<!DOCTYPE project [ 
     <!ENTITY common SYSTEM "../../common.xml"> 
]> 

<project name="dmodel" default="compile" basedir="."> 
    &common; 
    <target name="compile"> 
     <echo message="will create lib in ${lib}"/> 
     <echo message="will create docs in ${docs}"/> 
     <ant dir="module1" inheritAll="false"/> <!--works fine--> 
     <ant dir="module2" /> <!--does not work --> 
    </target> 
</project> 

這工作時,我設置inhertiAll = false爲螞蟻電話。

是否有更好更正確的方法?

從凱文擴展到這個問題的答案。使用進口 的common.xml成爲一個真正的項目像下面

<project name="toplevelproject" default="compile" basedir="."> 
    <property name="toplevel" value="settotrue"/> 
    <target name="compile"> 
     <ant dir="infrastructure_src/src" /> 
     <ant dir="interfaces_src/src" /> 
     <ant dir="datamodel_src/src" /> 
    </target> 
</project> 

的「datamodel_src/src目錄/ build.xml文件」現在有些人認爲像下面。

<project name="dmodel" default="compile" basedir="."> 
    <import file="../../common.xml" /> 
    <target name="compile"> 
     <echo message="will create classes in ${build}"/> 
     <echo message="will create lib in ${lib}"/> 
     <ant dir="module1" inheritAll="false"/> <!--works fine--> 
     <ant dir="module2" /> <!--does not work --> 
    </target> 
</project> 

導入提供了選項,以具有共同的目標等,因此我會去用它。

回答

1

我正在做類似的使用imports而不是包括。我所有的通用目標和屬性都在一個通用構建文件中定義,每個子項目只是導入公共文件。導入文件時,該文件中定義的屬性相對於導入文件而言。

所以我想嘗試做如下:

  1. 從子項目將你的編譯目標建立的文件到您的common.xml。

  2. 將common.xml導入到每個子項目build.xml中。

+0

謝謝。無論如何,「inheritAll」必須是假的。那是對的嗎? – Jayan 2011-02-19 16:31:57