0

我有一些 RAML 文件位于一个文件夹中,我正在设置一个 ANT 脚本以使用raml.org站点上的raml2html包将它们“构建”到 HTML 文档中。 我是 ANT 的新手,所以我可能没有最有效地使用它,但这是次要的问题。我使用两个目标来实现这个目标,它们看起来像这样(我省略了 clean 和 init):

<!-- Look for the RAML, send them one at a time to post-build -->

<target name="build" depends="clean, init">
    <echo message="searching for raml source in ${src}"/>
    <foreach param="file" target="post-build">
        <fileset dir="${src}">
            <include name="**/*.raml"/>
        </fileset>
    </foreach>      
</target>


<!-- Run raml2html on each of them, saving output in build/ -->
<target name="post-build" depends="">
    <echo>file: ${file}</echo>
    <substring text="${file}" parent-dir="${src}/" property="filename" />
    <echo>filename: ${filename}</echo>
    <echo>build-to: ${build}/${filename}</echo>
    <exec executable="raml2html" failonerror="true">
        <arg value="-i ${file}" />
        <arg value="-o ${build}/${filename}" /> 
    </exec>
</target>   

当我运行 ANT script:$ant build时,这两个目标返回:

build:
     [echo] searching for raml source in /home/ryan/workspace/RAMLValidator/src
  [foreach] The nested fileset element is deprectated, use a nested path instead

post-build:
     [echo] file: /home/ryan/workspace/RAMLValidator/src/sample.raml
     [echo] filename: sample.html
     [echo] build-to: /home/ryan/workspace/RAMLValidator/build/sample.html
     [exec] 2.0.2

看起来好像我提供给<exec>翻译成 raml2html选项的参数在途中的某个地方,因为当我从终端-V运行时它的版本是 2.0.2 。$raml2html -V当我从终端显式运行相同的命令时:$raml2html -i src/sample.raml -o build/sample.html,它会完全按照预期生成 HTML ......我是怎么搞砸的?

4

1 回答 1

0

问题在于 ANT 将选项标志和标志的参数视为单独的实体,每个实体都需要自己的<arg />标签才能正常运行。

像这样修改exec“post-build”目标中的任务解决了这个问题:

<exec executable="raml2html" failonerror="true">
    <arg value="-o" />
    <arg value="${build}/${filename}"/>
    <arg value="${file}" /> 
</exec>

希望这可以节省我花费的时间的一小部分!

于 2015-08-04T19:38:03.007 回答