2010-07-20 74 views
1

我試圖在ANT中執行以下操作,但卡住了。Ant:文件集中的連接屬性


  1. 哪些項目是安裝在我的項目工作區閱讀。

    workspace 
        buildtools 
         build.xml 
        project1 
         build.xml 
          project.name = "project1" 
          IP = "44.55.66.77" 
          SERVER_NAME = "project1.local" 
          DOCUMENT_ROOT = "c:\inetpub\project1" 
        project2 
         build.xml 
          project.name = "project2" 
          IP = "44.55.66.77" 
          SERVER_NAME = "project2.local" 
          DOCUMENT_ROOT = "c:\inetpub\project2" 
        .... 
    
  2. 爲每個項目創建一個Apache虛擬主機指令。

    <VirtualHost 44.55.66.77> 
        DocumentRoot "c:\inetpub\project1" 
        ServerName project1.local 
    </VirtualHost> 
    
    <VirtualHost 44.55.66.77> 
        DocumentRoot "c:\inetpub\project2" 
        ServerName project2.local 
    </VirtualHost> 
    .... 
    
  3. 將virtualhost指令連接到Apache配置文件中。


我花了很多時間學習,我可以用不同的任務。 Concat,loadproperties,fileset,filterreaders等。我不知所措,頭腦發熱。

這是我在這是如何做到可怕的猜想:

<concat destfile={$apache.config.file}> 
    <fileset> 
     <include name="**/build.xml"/> 
     <loadproperties resource="fileset.item.project.name???"/> 
     <filterchain>  
      <replacetokens> 
       <token key="IP" 
         value="${p.IP}"/> 
       <token key="DOCUMENT_ROOT" 
         value="${p.DOCUMENT_ROOT}"/> 
       <token key="SERVER_NAME" 
         value="${p.SERVER_NAME}"/>     
      </replacetokens>   
     </filterchain> 
    </fileset> 
<concat> 

感謝您的幫助!

+0

不完全遵循:IP/DOCUMENT_ROOT/SERVER_NAME值在哪裏定義 - 在每個項目下的屬性文件中?或者在每個項目下的build.xml中?它看起來像buildtools不應該生成虛擬主機指令 - 是嗎? – 2010-07-20 20:59:44

+0

你是對的。對不起,我應該更清楚了。編輯的問題。 – dbasch 2010-07-20 23:21:58

+0

更清晰;我通常會在每個項目下的文件中定義每個項目屬性。爲簡潔起見,我將它們作爲build.xml的一部分進行展示。 – dbasch 2010-07-20 23:23:59

回答

0

我認爲基本上不應該加載包含屬性作爲標準屬性文件的build.xml文件,因爲它們不是屬性文件(我的意思是key =每行文件的值)。如果你需要他們的東西,你應該導入它們。

我建議你用Groovy片斷做這樣的事情。

<!-- this is only a sketch, not a working solution --> 
<path id="gr"> 
    <pathelement location="/path/to/groovy-all.jar"/> 
</path> 

<taskdef name="groovy" 
      classname="org.codehaus.groovy.ant.Groovy" 
      classpathref="gr"/> 


<groovy> 
def b1 = new XmlParser().parse(new File("project1/build.xml"))); 
def b2 = new XmlParser().parse(new File("project2/build.xml"))); 

def f = new File("output.xml"); 
def ip1 = b2.property.find { it.name == 'IP'}.text(); 
def ip2 = .. 
// get out all the stuff you need from the build.xml files with GPath 

f.write("<VirtualHost ${ip1}>"); 
f.write(" DocumentRoot ${r1}"); 
f.write(" ServerName ${s1}"); 
f.write("<VirtualHost>"); 

</groovy>