2013-10-07 46 views
0

在ANT腳本中,是否有辦法將'environnement'目錄中的文件包含到不同的戰爭中?創建特定的WAR文件

我的文件樹:

  • 環境在
    • DEV
      • 的web.xml
      • log4j.properties
    • INT
      • 的web.xml
      • log4j.properties
  • 的WebContent
    • WEB-INF
      • 的web.xml
      • log4j.properties
      • 從build.xml文件

提取物:

<target name="createForDEV"> 
    <delete file="environnement/DEV/${timeStampDay}/${warfile}.war" /> 
    <war destfile="environnement/DEV/${timeStampDay}/${warfile}.war" webxml="environnement/DEV/web.xml" update="true"> 
    <classes dir="build/classes" /> 
    <fileset dir="WebContent"> 
     <exclude name="WEB-INF/web.xml" /> 
     <exclude name="**/Thumbs.db" /> 
    </fileset> 
    </war> 
</target> 
<target name="createForINT"> 
    <delete file="environnement/INT/${timeStampDay}/${warfile}.war" /> 
    <war destfile="environnement/INT/${timeStampDay}/${warfile}.war" webxml="environnement/INT/web.xml" update="true"> 
    <classes dir="build/classes" /> 
    <fileset dir="WebContent"> 
     <exclude name="WEB-INF/web.xml" /> 
     <exclude name="**/Thumbs.db" /> 
     <exclude name="**/test.jsp" /> 
    </fileset> 
    </war> 
</target> 

我有兩個配置文件:

  • 的開發環境
  • 適用於INT環境

當我創建WAR文件時,我想忽略一些文件並將其替換爲來自'environnement'目錄的其他特定文件?

  • createForDEV目標發動戰爭,我想借此從環境在/ dev文件,並替換相應的文件
  • createForINT目標發動戰爭,我想借此從環境在/ INT文件,並替換相應的文件
+0

難道你不打算在目標中對重寫的文件名進行硬編碼嗎?也就是說,無論文件發生在'DEV'還是'INT'都應該覆蓋'WebContent'中的文件? – joescii

+0

@barnesjd即使我在每個目標中硬編碼壓縮文件名,是否有任何解決方案? – Manu

+0

如果你不想要,你不必硬編碼。我會盡快發佈解決方案。 – joescii

回答

0

這裏的技巧是利用war任務的duplicate屬性,幷包括多個fileset元素。值爲preserveduplicate告訴它忽略重複的條目。第一個fileset(來自DEVINT)中的文件將首先放入戰爭中。 WebContent中的任何其他文件將包含在第二個fileset中,但是已經包含在DEVINT中的任何文件都將被忽略。

<target name="createForDEV"> 
    <delete file="environnement/DEV/${timeStampDay}/${warfile}.war" /> 
    <war destfile="environnement/DEV/${timeStampDay}/${warfile}.war" webxml="environnement/DEV/web.xml" update="true" duplicate="preserve"> 
    <classes dir="build/classes" /> 
    <fileset dir="environnement/DEV"> 
     <exclude name="web.xml" /> 
    </fileset> 
    <fileset dir="WebContent"> 
     <exclude name="WEB-INF/web.xml" /> 
     <exclude name="**/Thumbs.db" /> 
    </fileset> 
    </war> 
</target> 
<target name="createForINT"> 
    <delete file="environnement/INT/${timeStampDay}/${warfile}.war" /> 
    <war destfile="environnement/INT/${timeStampDay}/${warfile}.war" webxml="environnement/INT/web.xml" update="true" duplicate="preserve"> 
    <classes dir="build/classes" /> 
    <fileset dir="environnement/INT"> 
     <exclude name="web.xml" /> 
    </fileset> 
    <fileset dir="WebContent"> 
     <exclude name="WEB-INF/web.xml" /> 
     <exclude name="**/Thumbs.db" /> 
     <exclude name="**/test.jsp" /> 
    </fileset> 
    </war> 
</target> 
+0

感謝這個答案,但它不工作,因爲我想。例如,log4j.properties文件不在WAR的正確目錄中。它被複制到$ {warfile} .war/log4j.properties中,我需要它在$ {warfile} .war/WEB-INF/log4j.properties中 – Manu

+0

OK ...實際上,environnement/XXX'目錄必須具有相同的樹文件系統。例如,如果log4j.properties與「environnement/XXX/WEB-INF/log4j.properties」類似,則它可以工作。再次感謝 ! – Manu