我一直在尝试编写一个Ant任务,使用apply任务在我的项目中“编译”Sass脚本,但我不断收到“没有这样的文件或目录”错误。我认为它可能是由构建路径中的空格引起的,所以我经历了移动项目的麻烦,只是发现Ant在返回路径时似乎省略了文件集的根目录。这就是目标的样子:
<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>
为了帮助排除故障,我将可执行文件从sass切换到echo,我注意到mapper正在转换像这样的路径......
/用户/我/文档/编程/工作区/项目/的 SRC /java/com/proj/web/page/template/Template.scss
......进入这个......
/Users/me/Documents/Programming/workspace/Project/java/com/proj/web/page/template/Template.css
请注意目标文件路径中缺少src目录。我在这里看到一个错误还是以某种方式预期?我很想知道这里发生了什么。我也尝试过使用regexpmapper和带有replacestring的filtermapper。结果是一样的。
我正在运行Ant 1.7.1,它与Eclipse Helios捆绑在一起,我正在Mac上运行。我还在Mac和Linux上尝试过Ant 1.8。什么都行不通。有没有人有任何想法?
答案 0 :(得分:0)
看起来映射器正在处理${project.src.dir}
的内容,不包括文件夹本身。
您可以尝试在src
中指定${project.src.dir}
的父文件夹,例如${basedir}
并查看它是否产生了所需的结果吗?
答案 1 :(得分:0)
这是正常行为。映射器使用相对路径,而不是绝对路径。该路径将相对于工作(可能是基础)目录,在您的情况下,该目录是src
目录的父目录。
apply
task(glob)映射器提供相对于其dest
属性中指定的目录的路径:
单个映射器指定目标 相对于dest属性的文件 用于依赖性检查。如果是dest 指定属性将被使用 作为解析的基本目录 由...返回的相对路径名 映射器。至少一个文件集或 文件列表是必需的。
使用的相对路径是从指定的文件集派生的,因此它们不包含前导src
目录。
想到的选项是:
basedir
代替project.src.dir
(可能有用)<apply dest="src" ...
(更好)