2009-07-02 15 views
17

Estoy usando un script de compilación Ant para cotejar mi aplicación basada en Eclipse para su distribución.Cómo usar el comodín en el comando Disponible de Ant

Un paso de la construcción es comprobar que las bibliotecas correctas estén presentes en las carpetas de compilación. Actualmente uso el comando Ant para esto. Lamentablemente, tengo que modificar el script cada vez que cambio a una nueva versión de Eclipse (ya que los números de versión se habrán actualizado).

No necesito verificar los números de la versión, solo necesito verificar que el archivo esté allí.

Así que, ¿cómo puedo comprobar para:

org.eclipse.rcp_3.5.0.* 

en lugar de:

org.eclipse.rcp_3.5.0.v20090519-9SA0FwxFv6x089WEf-TWh11 

utilizando Ant?

aplausos, Ian

Respuesta

22

Es decir, algo así como (en base a la pathconvert task, después this idea):

<target name="checkEclipseRcp"> 
    <pathconvert property="foundRcp" setonempty="false" pathsep=" "> 
    <path> 
     <fileset dir="/folder/folder/eclipse" 
       includes="org.eclipse.rcp_3.5.0.*" /> 
    </path> 
    </pathconvert> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
+0

que suena perfecto - Me muero por probarlo. Si hubiera hecho la pregunta hace 3 años, habría ahorrado mucho tiempo. aplausos, Ian – ianmayo

0

La tarea pathconvert es probablemente la mejor forma de ir en la mayoría de los casos. Pero crea un pequeño problema cuando el árbol de directorios es muy grande y uno usa la tarea echoproperties. Con un árbol de directorios muy grande, la cadena generada por pathconvert puede ser enorme. Luego, echoproperties rocía la enorme cuerda, haciendo que la salida sea más difícil de trabajar. Yo uso un macrodef en Linux que crea una propiedad establecida en "1" si hay archivos en el directorio:

<macrodef name="chkDirContents" > 
    <attribute name="propertyName" /> 
    <attribute name="dirPath" /> 
    <attribute name="propertyFile" /> 
    <sequential> 
     <exec executable="sh" dir="." failonerror="false" > 
      <arg value="-c" /> 
      <arg value='fyles=`ls -1 @{dirPath} | head -1` ; if [ "$fyles" != "" ] ; then echo @{propertyName}=1 > @{propertyFile} ; fi' /> 
     </exec> 
    </sequential> 
</macrodef> 

<target name="test" > 
    <tempfile destdir="." property="temp.file" deleteonexit="true" /> 
    <chkDirContents propertyName="files.exist" dirPath="./target_dir" propertyFile="${temp.file}" /> 
    <property file="${temp.file}" /> 

    <echoproperties/> 
</target> 

ejecutando el objetivo de "prueba" generará la siguiente línea echoproperties si hay archivos en el ./ target_dir/directorio:

[echoproperties] files.exist=1 

Qué "prueba" hace: se genera un nombre de archivo temporal, $ {} temp.file, que luego puede usarse como un archivo de propiedades. A continuación, ejecuta el macrodef, que llama al shell para comprobar el contenido del directorio dirPath. Si hay archivos o directorios en dirPath, le asigna a la propiedad propertyName un valor de 1 en el archivo temporal. A continuación, lee el archivo y establece la propiedad dada en el archivo. Si el archivo está vacío, no se define ninguna propiedad.

Tenga en cuenta que el archivo temporal podría reutilizarse para las siguientes llamadas al macrodef si así lo desea. Por otro lado, por supuesto, una vez que se establece una propiedad, es inmutable.

+0

muy generoso de su parte para intervenir y ofrecer la mejora. Si tan solo hubiera sido consciente de esta mejora hace 4 años, cuando comenté que había estado al tanto de la solución base 3 años antes. ¿Quién sabe qué mejora puedo aprender en 5 años? – ianmayo

7

Un enfoque ligeramente más corto y más directo con resourcecount condición:

<target name="checkEclipseRcp"> 
    <condition property="foundRcp"> 
     <resourcecount when="greater" count="0"> 
      <fileset file="/folder/folder/eclipse/org.eclipse.rcp_3.5.0.*"/> 
     </resourcecount> 
    </condition> 
</target> 

<target name="process" depends="checkEclipseRcp" if="foundRcp"> 
    <!-- do something --> 
</target> 
Cuestiones relacionadas