2011-11-20 82 views
3

我有分佈在不同地方(在一個共同的根源)多個HTML文件,就像這樣:使用Ant封裝HTML代碼靜態模板

index.html 
moduleA/list.html 
moduleA/add.html 
moduleB/list.html 
moduleB/add.html 
... 

此外,我已經一個文件名爲_template.html,包含HTML代碼和佔位符#CONTENT#。 我需要什麼:

  1. 複製所有的HTML文件到公共/目錄
  2. 每個HTML文件中的公共/目錄還應該有來自_template.html周圍的原始內容包的代碼。

我用ANT要複製的文件,但我無法弄清楚如何環繞代碼模板的代碼... 我的Ant腳本是這樣的:

<project default="build"> 
    <target name="build"> 
     <copy todir="${dir.intermediate}/temp"> 
      <fileset dir="${dir.source}" includes="**/*.html"/> 
     </copy> 
    </target> 
</project> 

實施例:

的index.html

<div>This is the index-page</div> 

_template.html

<html> 
    <head><title>Page-Title</title></head> 
    <body> 
     #CONTENT# 
    </body> 
</html> 

應該產生的輸出文件:

<html> 
    <head><title>Page-Title</title></head> 
    <body> 
     <div>This is the index-page</div> 
    </body> 
</html> 

回答

0

一個可能的解決辦法,如果你想堅持使用內置的螞蟻任務將是你的模板文件分成兩個文件,一個「預」部分是這樣的:像這樣的「後」部分

<html> 
    <head><title>Page-Title</title></head> 
    <body> 

和:

</body> 
</html> 

那麼你可以使用在filterchainconcatfiltercopy任務中:

<copy todir="${dir.intermediate}/temp"> 
    <fileset dir="${dir.source}" includes="**/*.html"/> 
    <filterchain> 
    <concatfilter prepend="src/_template_pre.html" append="src/_template_post.html" /> 
    </filterchain> 
</copy> 

我看不到有一個模板文件,這樣做的任何方式,而不使用類似螞蟻的contrib或腳本。

+0

謝謝!該解決方案簡單而有效。閱讀完這個答案後,我能在3分鐘內解決我的問題。 – Philipp

2

這是完全有可能與純Ant任務:

首先使用的loadFile加載 「更新換代」 的字符串轉換成屬性:

<loadfile property="replacement" srcFile="index.html"/> 

然後在somehwere複製模板,在最終文件將做到這一點:

<replaceregexp file="${my.final.file}" 
       match="#CONTENT#" 
       replace="${replacement}" 
/> 

就是這樣你的文件現在應該期望的一個:)

+0

儘管這隻適用於單個文件。你必須做更多的事情來包裝文件集中的所有文件。 – matt

+0

@matt這可以是目標的一部分,並且可以使用ant-contrib foreach任務多次調用目標。如果你想要一個例子,讓我知道:) – FailedDev

+0

這個解決方案有風格,我喜歡它!但是,它需要額外的腳本才能將其應用於許多文件(for-loop + extra target),這會使我已經巨大的螞蟻腳本變得更大更難以維護。 – Philipp