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?

¿Fue útil?

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 de project.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?

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