2011-06-08 24 views
9

Quiero comparar el contenido de dos archivos (digamos archivo1.txt, archivo2.txt) usando ANT.ant: cómo comparar el contenido de dos archivos

si el contenido de los archivos es el mismo, entonces debe establecer alguna 'propiedad' en verdadero; si el contenido no es el mismo, entonces debe establecer la 'propiedad' como falsa.

¿Alguien puede sugerirme cualquier tarea de ANT que pueda hacer esto?

Gracias de antemano.

Respuesta

10

Usted puede usar algo como:

<condition property="property" value="true"> 
    <filesmatch file1="file1" 
       file2="file2"/> 
</condition> 

Esto establecerá la propiedad sólo si los archivos son los mismos. entonces usted puede comprobar por la propiedad, utilizando

<target name="foo" if="property"> 
... 
</target> 

Este servicio está disponible en la hormiga, sin dependencia añadido, ver here para otras condiciones.

+0

Hola Tonio, gracias por su respuesta. Está funcionando ... pero tengo alguna duda: -> – nitinJi

+0

Después de hacer una tarea de condición, quiero hacer algunas cosas como imprimir el valor de ** propiedad **. si los archivos son iguales, debe imprimir ** verdadero ** y si no debe imprimir ** falso ** pero para mí solo está imprimiendo ** falso ** incluso si los archivos son iguales. ' \t ' – nitinJi

+0

¡No puedo hacer que funcione y me vuelve loco! Por alguna extraña razón, la tarea de coincidencia de archivos en mi secuencia de comandos siempre devuelve "falso", excepto cuando el archivo 1 y el archivo 2 apuntan al mismo archivo. Pero tan pronto como apunto a diferentes archivos (incluso si uno es una copia 1: 1 del otro) el valor es falso. ¿Alguna idea de por qué podría ser así? Esto está en Windows 10 usando la versión ant 1.8.2 – mmo

0

estoy en la misma situación para comparar dos archivos y cambiar en diferentes objetivos en función de los archivos o archivos que coincida desajuste ...

Aquí está el código:

<project name="prospector" basedir="../" default="main"> 

<!-- set global properties for this build --> 
<property name="oldVersion" value="/code/temp/project/application/configs/version.ini"></property> 
<property name="newVersion" value="/var/www/html/prospector/application/configs/version.ini"></property> 

<target name="main" depends="prepare, runWithoutDeployment, startDeployment"> 
    <echo message="version match ${matchingVersions}"></echo> 
    <echo message="version mismatch ${nonMatchingVersion}"></echo> 
</target> 

<target name="prepare"> 

    <!-- gets true, if files are matching --> 
    <condition property="matchingVersions" value="true" else="false"> 
     <filesmatch file1="${oldVersion}" file2="${newVersion}" textfile="true"/> 
    </condition> 

    <!-- gets true, if files are mismatching --> 
    <condition property="nonMatchingVersion" value="true" else="false"> 
     <not> 
      <filesmatch file1="${oldVersion}" file2="${newVersion}" textfile="true"/> 
     </not> 
    </condition> 

</target> 

<!-- does not get into it.... --> 
<target name="startDeployment" if="nonMatchingVersions"> 
    <echo message="Version has changed, update gets started..."></echo> 
</target> 

<target name="runWithoutDeployment" if="matchingVersions"> 
    <echo message="Version equals, no need for an update..."></echo> 
</target> 

Las propiedades son correctos y cambian al cambiar el contenido del archivo. la tarea para NonMatchingVersions nunca se inicia.