当应用程序以gradle run启动时,java.util.scanner抛出NoTouchElementException
我创建了一个简单的java“echo”应用程序,它接收用户的输入并向他们展示,以演示问题。我可以使用IntelliJ的内部“run”命令运行此应用程序,并且在执行由当应用程序以gradle run启动时,java.util.scanner抛出NoTouchElementException,java,gradle,java.util.scanner,build.gradle,stdin,Java,Gradle,Java.util.scanner,Build.gradle,Stdin,我创建了一个简单的java“echo”应用程序,它接收用户的输入并向他们展示,以演示问题。我可以使用IntelliJ的内部“run”命令运行此应用程序,并且在执行由gradle build生成的编译后的java文件时也可以运行此应用程序。但是,如果我尝试使用gradle run执行应用程序,我会从扫描仪中抛出一个NoTouchElementException 我认为gradle或应用插件在系统IO上做了一些奇怪的事情 应用程序 package org.gradle.example.simple;
gradle build
生成的编译后的java文件时也可以运行此应用程序。但是,如果我尝试使用gradle run
执行应用程序,我会从扫描仪中抛出一个NoTouchElementException
我认为gradle或应用插件在系统IO上做了一些奇怪的事情
应用程序
package org.gradle.example.simple;
import java.util.Scanner;
public class HelloWorld {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String response = input.nextLine();
System.out.println(response);
}
}
build.gradle
apply plugin: 'java'
version '1.0-SNAPSHOT'
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'org.gradle.example.simple.HelloWorld'
}
}
apply plugin: 'application'
mainClassName = "org.gradle.example.simple.HelloWorld"
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
您知道如何使用
gradle run
?运行此应用程序吗?您必须将默认stdin连接到gradle,将其放入build.gradle:
run{
standardInput = System.in
}
除了公认的答案之外:如果您使用的是而不是普通的Groovy DSL,那么您必须编写以下内容:
tasks {
run {
standardInput = System.`in`
}
}
附加说明:我在Spring引导应用程序中遇到了类似的问题。在那里,我不得不修改
bootRun
任务,而不是run
任务。这非常有效,对于那些对现在出现的gradle--console plain run
丑陋提示感到恼火的人来说,它将被删除。这有一个公开的问题,我在那里找到了这个代码段。如果不使用应用程序插件,则standardInput=System.in
行应该位于您正在运行的任何需要stdin重定向到它的任务中。对我来说,它是在一个自定义任务中。老兄,它在我的运行脚本中不起作用。你能解释一下吗?你只是把这个片段放在build.gradle中,然后键入gradle run,你得到了什么错误?找不到参数[build\u 70djsz9uqda5dtwfrqrhv32tu$\u run]的run()方法_closure3@446452bb]在org.gradle.api.project类型的根项目上。