Ant Java任务:如何获得输出到控制台和文件总是记录构建输出而没有shell重定向

时间:2012-04-12 10:39:26

标签: java ant

我正在使用ant来启动Java程序。

程序终止后,我不想“松散”输出。所以我使用属性“output”将输出存储在文件中。

<java classname="..." fork="true" output="....txt">

不幸的是我没有任何控制台输出了。在txt文件中将输出设置为控制台的好方法。

我正在寻找

的替代方案
ant mytast > myFile.txt

因为我不想要“用户”必须使用shell重定向“&gt; ..”。 。如果他/她没有选择重定向,则输出会丢失。

3 个答案:

答案 0 :(得分:7)

Ant有记录输出的方法。 http://ant.apache.org/manual/Tasks/recorder.html

  

记录器是当前构建过程的监听器,用于记录   输出到文件。

     

可以同时存在多个录像机。每台录音机都是   与文件相关联。文件名用作唯一标识符   对于录音机。第一次使用未使用的调用记录器任务   filename将创建一个记录器(使用提供的参数)和   将它添加到构建的侦听器。随后的所有电话   使用此文件名的记录器任务将修改该记录器状态   (是否记录)或其他属性(如记录级别)。

看起来符合您的需求。

    <compile >
        <record name="log.txt" action="start"/>
        <javac ...
        <record name="log.txt" action="stop"/>
    <compile/>

答案 1 :(得分:1)

如果程序写入一个文件描述符(例如标准输出),则可以将其重定向到一个位置(因此控制台或文件,而不是两者)。

要实现多重定向,您有两种选择:

  • 使用外部方法复制该文件描述符(例如,tee命令就是这样 - 即使对于Windows,也有实现:请参阅herehere
  • 将相同的信息写入java程序中的两个不同输出(例如,标准输出和标准错误),然后您可以使用传统方法重定向一个,另一个转到控制台

我不建议使用第二种方法,因为它会使您的代码变得混乱,并且您通常无法完全控制所写的标准错误(考虑调用第三方函数)。

答案 2 :(得分:0)

你可以使用记录任务。我认为这符合你的需要。

https://ant.apache.org/manual/Tasks/recorder.html