【问题标题】:Can't get Gradle to use System.in无法让 Gradle 使用 System.in
【发布时间】:2016-10-25 18:04:58
【问题描述】:

This question 解释了在运行任务时如何使用System.in 来运行项目中的特定类。

但对我来说目前它不起作用:虽然我在build.gradle 中包含了application 插件和以下行:

mainClassName = "misc.StreamsExp"
run{ 
    standardInput = System.in 
}
task stream( type: JavaExec, dependsOn: assemble ){
    classpath sourceSets.main.runtimeClasspath
    main = "misc.StreamsExp"
}

下面的应用代码中带有readLine 的行应该是阻塞的,但不是:

BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));

String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
    System.out.println( "spuds");
    enteredLine = br.readLine();
}

...相反,事情只是永远旋转:

土豆
土豆
土豆
...

注意,我使用的是 Windows 10 操作系统,Java 8.91。我已经尝试过 Windows DOS 控制台和 Cygwin。
NB2 当我在 Eclipse(Gradle STS Eclipse 插件)中运行这个 stream 任务时会发生同样的事情......但当我执行 Run as --> Java application 时不会发生同样的事情:然后阻塞会按预期发生。

【问题讨论】:

    标签: gradle inputstream blocking system.in


    【解决方案1】:

    哈......其中一个你认为你会永远被难住的地方,你在发布到 SO 后 2 分钟找到了解决方案!我会把它留给其他人......

    答案是将standardInput = 行放入您正在运行的任务中,如下所示:

    task stream( type: JavaExec, dependsOn: assemble ){
        standardInput = System.in
        classpath sourceSets.main.runtimeClasspath
        main = "misc.StreamsExp"
    }
    

    奇怪的是,在 Windows DOS 终端中,提示符“spuds”后面是

    > 建筑 88% > :stream

    ...这是我引用的问题中提到的已知“错误”。在 Cygwin 中不会发生此错误。

    CAVEAT:这适用于 Windows DOS 终端和 Cygwin 终端...它确实解决了在 Eclipse 中运行定制的stream 任务时的问题!

    【讨论】:

    • 对...正如我所说,就我而言,它在 Eclipse IDE 中不起作用。它似乎只适用于 CLI 终端。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多