1

我正在尝试在 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>

谢谢您的帮助!

4

1 回答 1

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>
于 2011-05-05T14:24:00.040 回答