Java 使用Exec命令上的多行stdin的Ant构建

Java 使用Exec命令上的多行stdin的Ant构建,java,ant,Java,Ant,因此,我在OSGI框架之上构建了一个应用程序。我制作了一个用于自动安装的ant脚本: <target name="run" depends="build"> <exec executable="java"> <arg value="-jar" /> <arg value="bin/osgi.jar" /> <arg value="-console"

因此,我在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-jarbin/osgi.jar-console
。但我还需要将这些输入(如
重定向器
标记中所示)输入到stdin。不幸的是,除了第一行之外,该脚本无法工作(它只运行
安装文件:./bin/gps.jar


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

在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;" />

或者,将inputstring定义为属性

    <property name="console.input">install file:./bin/gps.jar
install file:./bin/context-manager.jar
start 2
start 1</property>
安装文件:./bin/gps.jar
安装文件:./bin/context-manager.jar
开始2
开始1

然后说
。元素内容中的换行符(与属性相反)将由解析器保留。

为什么会被否决?
    <property name="console.input">install file:./bin/gps.jar
install file:./bin/context-manager.jar
start 2
start 1</property>