2010-07-20 1 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, набор файлов, фильтровщики и т. Д. Я становлюсь перегруженным всеми возможностями, и голова вращается.

Вот моя ужасная догадка, как это может быть сделано:

<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 не должен генерировать директиву виртуального хоста - это правильно? –

+0

Вы правы. Извините, я должен был быть яснее. Вопрос отредактирован. – dbasch

+0

Чтобы быть яснее; Обычно у меня есть свойства каждого проекта, определенные в файлах в каждом проекте. Я показываю их как часть build.xml выше для краткости. – dbasch

ответ

0

Я думаю, что в основном вы не должны загружать файлы build.xml, содержащие свойства в качестве стандартных файлов свойств, поскольку они не являются файлами свойств (я имею в виду key = value для строк). Вы должны импортировать их, если вам нужны вещи из них.

Предлагаю вам делать такие вещи с помощью фрагмента 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>