使用映射器时,绝对路径中缺少Ant文件集的“目录”

时间:2011-02-01 04:59:00

标签: ant apply fileset mapper

我一直在尝试编写一个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。什么都行不通。有没有人有任何想法?

2 个答案:

答案 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" ...(更好)
  • 指定目录