2010-07-20 77 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>