Ant: объединить свойства из набора файлов - PullRequest
1 голос
/ 20 июля 2010

Я пытаюсь сделать следующее в АНТ, но я застрял.


  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>

Спасибо за помощь!

1 Ответ

0 голосов
/ 05 мая 2011

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

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