蚂蚁在运行java类时从std中读取时挂起

问题描述:

我有一个从std中读取的java类。当我使用java任务从ant运行这个类时ANT只是挂起并且不显示我的提示输入,也没有它接受来自命令行的输入。它只是挂在那里。如果我使用shell脚本运行相同的类,它将起作用。蚂蚁在运行java类时从std中读取时挂起

有谁知道ANT为什么这么做?我试着将fork(在java任务上)设置为true和false。两人都没有工作。

Ant正在执行一些System.in和System.out拦截(观察从自定义任务中执行System.out.println()时会发生什么),但您可以通过使用输入任务

http://ant.apache.org/manual/Tasks/input.html

例如,你可以有一个任务叫下面的代码

public class AccountSettings extends Task { 
    private String guid; 
    public AccountSettings() { 
    super(); 
    guid = null; 
    } 

    public void execute() throws BuildException { 
    if(guid != null) { 
     //Do something with guid 
    } else { 
     throw new BuildException("guid not defined!"); 
    } 
    } 

    public void setGuid(String value) { 
    guid = value; 
    } 
} 

,然后让“GUID”值通过输入任务设定下列位AccountSettings xml

<taskdef name="settings" classname="AccountSettings"/> 
<input message="Enter an account guid" addproperty="ACCOUNT.GUID"/> 
<settings guid="${ACCOUNT.GUID}"/> 

你能分享你的代码,因为我只是尝试了这个example,使用这种简单的的build.xml和它的工作对我来说:

<project default="run"> 
<target name="run"> 
<java classpath="." classname="ReadString"/> 
</target> 
</project> 

输出是丑陋,但有效。

如果(如@Jason Sperske所说)Ant截取(替换)System。*流,则另一种方法是修改Java类以使用java.io.Console类读取和写入控制台。但是,请注意,这将避免(例如)从命令shell运行Ant时可能执行的标准流的任何重定向。