2012-03-29 12 views
7

Sto provando a sostituire un numero di versione in un file build.xml utilizzando uno script ANT.Sostituisci proprietà in un file xml usando ANT

Ho provato vari approcci, cercato e ri-cercato StackOverflow per le risposte ma non ho potuto ottenere la query esatta.

ecco il mio file xml:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.0"?> 

<project name="feature" default="main" basedir="."> 
<target name="init">  
    <property name="Version" value="1.0.0.20120327"/> 
</target> 

    <target name="main" depends="init"> 
    <description>Main target</description> 
</target> 
</project> 

Ora, come u può vedere la versione è la data di ieri. Devo sostituirlo con la data corrente.

Ecco che cosa ho provato:

<target name="replace"> 
    <tstamp > 
    <format property="touch.time" pattern="yyyyMMdd"/> 
    </tstamp> 

<property name="Feature.dir" location="../feature" /> 

<!--Didnt Work-->  
<copy file="${Feature.dir}\build.xml" tofile="${Feature.dir}\build1.xml" 
filtering="yes" overwrite="yes"> 
<filterset> 
    <filter token="Version" value="1.0.0.${touch.time}"/> 
</filterset> 
    </copy> 

    <!--Didnt work 

    <replacetoken><![CDATA[<property name="Version" value=""/>]]> 
    </replacetoken> 
    <replacevalue><![CDATA[<property name="Version"value="1.0.0.${touchtime}" />]]> 
    </replacevalue> 

    --> 


<!-- Didnt work 
    <copy file="${Feature.dir}/build.xml" tofile="${Feature.dir}/build1.xml" > 
     <filterchain> 
     <tokenfilter> 
       <replaceregex pattern="^[ \t]*Version[ \t]*=.*$" 
           replace="Version=1.0.0.${touch.time}"/> 
     </tokenfilter> 
      </filterchain> 
</copy> 
--> 
</target> 

risposta

9

userei replaceregex all'interno di una filterchain.

Ad esempio:

<copy file="${Feature.dir}\build.xml" tofile="${Feature.dir}\build1.xml"  
    filtering="yes" overwrite="yes"> 
    <filterchain> 
     <tokenfilter> 
      <replaceregex pattern="1.0.0.[0-9.]*" replace="1.0.0.${touch.time}"/> 
     </tokenfilter> 
    </filterchain> 
</copy> 

Se si desidera sostituire il file, sentitevi liberi di copiare un file temporaneo e spostarlo indietro.

<tempfile property="build.temp.file.name"/> 
<copy file="${Feature.dir}\build.xml" tofile="${build.temp.file.name}" ... /> 
<move file="${build.temp.file.name}" tofile="${Feature.dir}\build.xml" /> 
+0

Grazie. Ma solo una domanda. Cosa succede se volevo apportare questa modifica allo stesso file stesso? Ho provato: non ha ancora lavoro – sloggers1894

+0

Nessun problema. Vedi la mia risposta modificata. – Synesso

Problemi correlati