La "Dir" de Ant Fileset falta en la ruta absoluta cuando se usa un mapeador
Pregunta
He estado tratando de escribir una tarea de hormiga para "compilar" los scripts SASS en mi proyecto usando la tarea de aplicación, pero seguí recibiendo un error de "no hay archivo o directorio". Pensé que podría haber sido causado por espacios en el buildpath, así que tuve la molestia de mover el proyecto solo para encontrar que Ant parece omitir el directorio raíz del conjunto de archivos cuando devuelve la ruta. Así es como se ve el objetivo:
<target name="sass-compile" depends="properties">
<apply executable="sass">
<srcfile />
<targetfile />
<fileset dir="${project.src.dir}" includes="**/*.scss" />
<globmapper from="*.scss" to="*.css" />
</apply>
</target>
Para ayudar a solucionar problemas, cambié el ejecutable de Sass a Echo y noté que el mapeador está transformando rutas como esta ...
/Usuarios/me/documentos/programación/espacio de trabajo/proyecto/SRC/java/com/proj/web/page/template/template.scss
...dentro de esto...
/Users/me/documents/programming/workspace/project/java/com/proj/web/page/template/template.css
Observe que falta el directorio SRC en la ruta del archivo de destino. ¿Estoy viendo un error aquí o se espera de alguna manera esto? Me encantaría saber qué está pasando aquí. También he intentado usar un RegExpMapper y un FilterMapper con Replacestring. El resultado es el mismo.
Estoy ejecutando Ant 1.7.1, que viene incluido con Eclipse Helios, que estoy ejecutando en una Mac. También probé Ant 1.8 en Mac y Linux. Nada funciona. ¿Alguien tiene alguna idea?
Solución
Es un comportamiento normal. Los mapeadores usan pariente caminos, no absolutos. La ruta será relativa al directorio de trabajo (probablemente base), que en su caso es el padre del src
directorio.
los apply
tarea (Glob) mapper proporciona rutas relativas al directorio especificado en su dest
atributo:
Un solo mapeador especifica los archivos de destino en relación con el atributo Dest para la verificación de dependencia. Si se especifica el atributo Dest, se utilizará como directorio base para resolver los nombres de ruta relativos devueltos por el mapeador. Se requiere al menos un conjunto de archivos o filelista.
La ruta relativa utilizada se deriva del conjunto de archivos especificada, por lo tanto, no contienen el líder src
directorio.
Las opciones que vienen a la mente son:
- Utilizar el
basedir
del proyecto en lugar deproject.src.dir
(Podría funcionar) - Especifique el directorio usando
<apply dest="src" ...
(mejor)
Otros consejos
Parece que el mapeador está trabajando con el contenido de ${project.src.dir}
, excluyendo la carpeta en sí.
¿Puede intentar especificar la carpeta principal de src
en ${project.src.dir}
, decir ${basedir}
y ver si produce el resultado deseado?