2013-12-20 45 views
0

我們有一個ant構建過程,目前構建我們的war文件。戰爭中非編譯文件(html)的一個子集需要進行令牌替換,但我不想在磁盤上執行此操作(我們不想保存更改)。隨着戰爭的建立,是否有任何方法來執行令牌替換。WAR任務中的ANT文本替換

當前戰爭過程

<war basedir="${company.webapps.dir}" destfile="${dist.dir}/${company.war.filename}" 
    webxml="${company.webapps.dir}/WEB-INF/web.xml" update="true"> 
    <exclude name="WEB-INF/**" /> 
    <exclude name="**/*.coffee" /> 
    <exclude name="**/*.haml" /> 
    <exclude name="**/*.sass" /> 
    <exclude name="**/*.scss" /> 
    <webinf dir="${company.webapps.dir}/WEB-INF/"> 
     <include name="**/*" /> 
     <exclude name="**/servlet-api.jar" /> 
    </webinf> 
    <manifest> 
     <attribute name="build-timestamp" value="${build.info.timestamp}" /> 
    </manifest> 
</war> 

如果它不添加大量的時間,我會確定這個是一個戰後任務

回答

0

我對你們的發言感到困惑:「我不想在磁盤上這樣做(我們不想保存更改)「。你能詳細說明一下嗎?您可以使用<copy/>任務與<filterset>,這將允許您處理您的HTML文件並替換您想替換的任何標記。

然後,您可以使用在戰爭中具有替換的標記的文件的複製版本。我在戰爭中嘗試使用<filterset>,但它不適用於<fileset><classes>。你必須使用<copy>來使用<filterset>,這就是我一直這樣做的。

你是什麼意思保存更改?您不必保存複製的文件,它們就像其他所有文件一樣是工作文件。

<copy dir="${html.dir}" 
    todir="${html.work.dir}"> 
    <filterset> 
     <filter token="${token1}" value="${value1}"/> 
     <filter token="${token2}" value="${value2}"/> 
    <filterset> 
</copy> 

<war destfile="${war.file}" 
    webxml="${web.xml.file}"> 
    <classes dir="${html.work.dir}"/> <!-- The munged HTML files --> 

+0

我們有一個大的目錄以各種路徑HTML文件中設置。我想在它們上做令牌替換,但我不想讓代替替換被提交給git。我希望能夠完成戰爭文件,然後在戰爭中替換代幣。沒有考慮採取兩個階段的做法。理論上,我可以在沒有html文件的情況下創建戰爭,將它們複製到臨時位置,將它們標記化,然後將它們添加到戰爭中,然後刪除它們。 – dstarh

+0

我現在明白了......我幾乎從不使用''這個任務。您正在使用作爲源代碼庫一部分的文件,並且很容易提交更改並丟失嵌入的令牌。在中使用''可以更好地工作,因爲我可以將文件複製到工作目錄中,而不用擔心它們會意外地被提交。我希望''直接在''任務中工作,所以我可以在構建戰爭時進行過濾。 –

+0

直接在戰爭中使用filterset將正是我想要的。 – dstarh