在Exec命令上使用多行stdin进行Ant构建

时间:2013-11-16 11:23:19

标签: java ant

所以我在OSGI框架之上构建了一个应用程序。我为自动安装制作了一个ant脚本:

    <target name="run" depends="build">
        <exec executable="java">
            <arg value="-jar" />
            <arg value="bin/osgi.jar" />
            <arg value="-console"/>
            <redirector inputstring="
install file:./bin/gps.jar
install file:./bin/context-manager.jar
start 2
start 1" />
        </exec>

    </target>

实际上,它会运行java -jar bin/osgi.jar -console。但我也需要输入那些输入(如redirector标签所示)到stdin。不幸的是,除了第一行(它只运行install file:./bin/gps.jar

之外,该脚本不起作用

如何使ant能够在多行中接受stdin?

1 个答案:

答案 0 :(得分:1)

在Ant甚至看到值之前,XML属性中的换行符由XML解析器标准化为空格。您需要将它们作为字符引用(&#10;&#xA;)转义:

<redirector inputstring="install file:./bin/gps.jar&#xA;install file:./bin/context-manager.jar&#xA;start 2&#xA;start 1&#xA;" />

如果您正在调用的程序可以处理每个命令前面的空格,那么您仍然可以在构建文件中打印这个

<redirector inputstring="install file:./bin/gps.jar&#xA;
  install file:./bin/context-manager.jar&#xA;
  start 2&#xA;
  start 1&#xA;" />

或者,将inputstring定义为属性

    <property name="console.input">install file:./bin/gps.jar
install file:./bin/context-manager.jar
start 2
start 1</property>

然后说<redirector inputstring="${console.input}" />。解析器将保留元素内容中的换行符(而不是属性)。