2010-07-20 4 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 지정 문을 작성하십시오.

    <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. 가상 호스트 지정 문을 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가 가상 호스트 지시문을 생성해서는 안된 것 같습니다. 맞습니까? –

+0

정확합니다. 미안해, 내가 분명해야 했어. 질문이 수정되었습니다. – dbasch

+0

더 명확하게; 나는 보통 각 프로젝트의 속성을 프로젝트의 파일에 정의한다. 위의 build.xml의 일부로 간략하게 설명합니다. – dbasch

답변

0

기본적으로 속성 파일이 아닌 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> 
관련 문제