0

今天我不得不向 Apache Ant 文件添加一个任务。命令行应该类似于

myprogram --param1 --param2 path\somefile 2> path\logfile

问题在于,如果我为此使用以下内容

<exec executable="$(myprogram)"
  <arg value="--param1">
  <arg value="--param2">
  <arg path="$(somefile)">
  <arg value="2>">
  <arg path="$(logfile)">
</exec>

所有参数都被引用,所以命令看起来像这样:

myprogram "--param1" "--param2" "path\somefile" "2>" "path\logfile"

如果文件/路径中有空格,这还不错,特别好,但会破坏到日志文件的管道(相反,程序认为还有两个额外的文件参数“2>”和“path\logfile”)。

我通过调用一个批处理脚本来解决这个问题,而不是只需要文件作为参数,但我想知道:如果没有这样的解决方法,是否可以做到这一点?

4

4 回答 4

2

你试过<arg line="..." />吗?

于 2009-10-21T18:28:13.537 回答
2

当您运行“myprogram --param1 --param2 path\somefile 2> path\logfile”时,程序的参数以“2>”结束。文件重定向是你的 shell 的一个操作,它不是在 ant 中使用的。如果您查看ant exec task的文档,您会发现它支持通过output属性进行重定向。

于 2009-10-21T18:30:56.873 回答
1

ant exec 任务有一个输出参数,您可以在其中指定日志文件而不需要命令行管道,并结合参数 append 来确定是否应该覆盖或附加输出文件。

于 2009-10-21T18:31:19.930 回答
1

我遇到了与主题启动者相同的问题。在 java 执行命令行上,我需要将源文件添加为单独的参数,而不是作为一个带有引号的参数。我使用了<arg value="..." />标签,但使用<arg line="..." />as nullptr 建议解决了我的问题。

于 2011-04-29T09:43:55.210 回答