La expansión del conjunto de archivos Ant no funciona
-
18-09-2020 - |
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?
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 location
attribe 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: - /