Pregunta

Recibo una reacción muy confusa de mi archivo de compilación ant y me pregunto si simplemente no soy lo suficientemente inteligente o si esto podría ser un error.

Tengo la siguiente propiedad establecida globalmente en mi proyecto:

<property name="lib.dir" location="lib"/>

Luego intentaré agregar algunos archivos de este directorio a un archivo jar mediante un conjunto de archivos (más de un recurso):

<fileset dir="${basedir}" includes="lib/*filename*"/>

Debería haber (y existir) 3 bibliotecas diferentes, que coincidan de esa manera.Sin embargo, si intento utilizar lo siguiente, no funciona y no se incluyen archivos:

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/>

Tenga en cuenta que las únicas diferencias radican en el uso de la propiedad global.Ahora la simple pregunta:¿Por qué la primera versión funciona como se anuncia, pero la segunda no?

¿Fue útil?

Solución

Compruebe el valor real de "lib.dir" justo antes y tal vez después de la tarea que usa la expresión "FileSet".Solo para asegurarse de que no se ha cambiado accidentalmente después de haberlo configurado a nivel mundial.La tarea <echo/> puede ayudar.


Tal vez tengo la solución.La descripción de la locationattribe es:

Establece la propiedad al nombre de archivo absoluto del archivo dado.Si el valor de este atributo es una ruta absoluta, se deja sin cambios (con / y \ caracteres convertidos en las convenciones actuales de plataformas).De lo contrario, se toma como un camino en relación con el Basado del proyecto y se expandió.

Simplemente use el atributo value en lugar de location.Aquí hay un script de prueba para mostrar la diferencia:

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

La salida en mi sistema es la siguiente:

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml
target:
     [echo] D:\Develop\workspace-jabber\scrapbook\lib
     [echo] lib
BUILD SUCCESSFUL
Total time: 307 milliseconds

Otros consejos

He encontrado una pista de la respuesta, pero no todo lo que todavía.

Corrí ambas versiones deletes con hormiga con hormiga y aquí es lo que sucede.

En la versión de trabajo, no usando-propiedad, obtengo la siguiente salida:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] }

Considerando que en la versión debería ser trabajando, pero-no recibo:

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

Como puede ver, AD Add's The [PathTodir] en la regularización, buscando así

[pathToDir]/[pathToDir]/lib/*filename*

que obviamente no existe.Problema Ahora: ¿Cómo tengo que modificar mi versión para que funcione correctamente?

Al crear la propiedad (¿se hace globalmente o en un destino?), ¿el directorio lib ¿existir?Si no, el location El atributo no funciona: utilice un value atributo en su lugar o definir mejor la propiedad después de crear el directorio.

Como se indicó anteriormente, el problema era que $ {lib.dir} también contenía toda la ruta, buscando así [patinTodir] / [PathTodir] / lib / filename .

Para cortar la propiedad no deseada [PathTodir] en la propiedad $ {lib.dir}, ahora usé la tarea.Ahora obtuve lo siguiente, pero IMHO no es una solución tan bonita:

<basename property="lib.dir.rel" file="${lib.dir}"/>
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/>

P.s.: En una segunda mirada, encontré que Andreas_D también encontré la razón correcta y una buena sugerencia ayer, que debo haber pasado por alto: - /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top