Die „Dir“ von ANT Filesets fehlt bei der Verwendung eines Mapper auf dem absoluten Pfad
Frage
Ich habe versucht, eine Ameisenaufgabe zu schreiben, um SASS -Skripte in meinem Projekt mithilfe der Aufgabe anwenden zu "kompilieren", aber ich habe immer wieder einen Fehler "keine solche Datei oder Verzeichnis" erhalten. Ich dachte, es könnte durch Räume im BuildPath verursacht worden sein, also habe ich mir die Mühe gemacht, das Projekt zu bewegen, um festzustellen, dass Ant den Root -Verzeichnis des Dateisets, wenn es den Pfad zurückgibt, zu weglassen scheint. So sieht das Ziel aus:
<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>
Um die Fehlerbehebung zu unterstützen, habe ich die ausführbare Datei von Sass auf Echo umgestellt und bemerkte, dass der Mapper solche Pfade verwandelt ...
/User/me/documents/programming/arbeitsspace/project/src/java/com/proj/web/page/template/template.scss
...das mögen...
/Users/me/documents/programming/workspace/project/java/com/proj/web/page/template/template.css
Beachten Sie, dass das SRC -Verzeichnis im Zieldateipfad fehlt. Sehe ich hier einen Fehler oder wird das irgendwie erwartet? Ich würde gerne wissen, was hier los ist. Ich habe auch versucht, einen RegexpMapper und einen Filterapper mit Austausch zu verwenden. Das Ergebnis ist das gleiche.
Ich leite Ant 1.7.1, das mit Eclipse Helios gebündelt wird, die ich auf einem Mac leite. Ich habe auch Ant 1.8 sowohl auf Mac als auch auf Linux ausprobiert. Nichts funktioniert. Hat jemand irgendwelche Ideen?
Lösung
Es ist normales Verhalten. Die Mapper verwenden relativ Wege, nicht absolut. Der Pfad ist relativ zum Arbeitsverzeichnis (wahrscheinlich Basis), das in Ihrem Fall der Elternteil der ist src
Verzeichnis.
Das apply
Aufgabe (Glob) Mapper liefert Pfade relativ zum in seiner angegebenen Verzeichnis dest
Attribut:
Ein einzelner Mapper gibt die Zieldateien relativ zum Dests -Attribut für die Abhängigkeitsprüfung an. Wenn das Dests -Attribut angegeben wird, wird es als Basisverzeichnis zur Lösung von relativen Pfadnamen verwendet, die vom Mapper zurückgegeben werden. Mindestens eine Datei- oder Filelist ist erforderlich.
Der verwendete relative Pfad wird aus dem angegebenen Dateisatz abgeleitet, daher enthalten sie die Führung nicht src
Verzeichnis.
Optionen, die mir in den Sinn kommen, sind:
- Verwenden Sie das
basedir
des Projekts stattproject.src.dir
(könnte funktionieren) - Geben Sie das Verzeichnis mit
<apply dest="src" ...
(besser)
Andere Tipps
Es sieht so aus, als würde der Mapper mit dem Inhalt von arbeiten ${project.src.dir}
, mit Ausnahme des Ordners selbst.
Können Sie versuchen, den übergeordneten Ordner von anzugeben? src
in ${project.src.dir}
, sagen ${basedir}
Und sehen Sie, ob es das gewünschte Ergebnis erzielt?