Ant构建脚本以运行批处理文件,同时将用户输入传递给批处理文件

时间:2014-07-30 16:33:34

标签: java batch-file ant cmd build.xml

我正在编写一个构建脚本,用于执行.bat文件,用户在按Enter键执行ant脚本之前提供输入。我已经使用了bat文件,它运行良好,但我之前从未尝试过将bat文件集成到构建脚本中,尤其是需要输入的文件。没有输入组件的构建脚本应该看起来像我相信:

<target name="css-val">
    <exec dir="M:\burnjc_view\ServiceTeams\Team 4\Report\CssValidation\bin" executable="cmd" os="Windows 7">
        <arg line="/c cssvalFile.bat"/>
    </exec>
</target>

需要输入才能正常运行的bat文件如下所示:

java -jar css-validator.jar -output gnu file:///%1 > ..\output\%2

输入1是要由css-validator.jar验证的文件的文件和目录,而2是输出的文件名。

如何让ant脚本将输入传递给它正在执行的bat文件,这样它的工作方式就像某人自己执行bat文件一样?我知道运行整个事情的用户输入的第一部分将是&#34; ant css-val&#34;,但之后我不知道如何将输入传递给bat文件。

2 个答案:

答案 0 :(得分:2)

您可以使用-D开关传递参数:

-D<property>=<value>    Defines a property name-value pair on the command line.

您可以使用${<property>}

来引用此参数

例如:

<target name="css-val">
    <exec dir="M:\burnjc_view\ServiceTeams\Team 4\Report\CssValidation\bin" executable="cmd" os="Windows 7">
        <arg line="/c cssvalFile.bat ${file1} ${file2}"/>
    </exec>
</target>

并在运行时

ant -Dfile1=somefile -Dfile2=somefile build.xml

希望这有帮助

答案 1 :(得分:2)

虽然Sanjeev的回答是让我在这里的原因,因为他表明输入与arg线在同一条线上,我认为还有一个替代答案,其中提示用户是有益的输入(这也允许输入验证,我将在稍后展示的功能)。在我优化构建脚本时,我也可以更新此代码以显示其他有用的功能:

<target name="css-val">
    <input
        message="Please enter directory and filename of file to be validated:  "
        addproperty="validate.file"
    />
    <input
        message="Enter directory and file name to use for output report:  "
        addproperty="report.file"
    />
    <exec dir=""M:\burnjc_view\ServiceTeams\Team 4\Report\CssValidation\bin" executable="cmd" os="Windows 7">
        <arg line="/c cssValSoapFile.bat ${validate.file} ${report.file}"/>
    </exec>
</target>

如果其中一个参数中有空格,则上述操作无效,因为每个参数都用空格分隔。在那种情况下,使用arg值而不是arg行。写的更多,但是当有空格时它会起作用。