2016-04-19 88 views
3

我創建了一個簡單的java「echo」應用程序,它接受用戶的輸入並將其顯示給他們以證明問題。我可以毫無困難地使用IntelliJ的內部「運行」命令運行此應用程序,並且在執行由gradle build生成的編譯後的java文件時也可以運行此應用程序。但是,如果我嘗試使用gradle run執行應用程序,則會收到掃描程序拋出的NoSuchElementException異常。當使用Gradle運行應用程序時,java.util.scanner拋出NoSuchElementException

我認爲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這個應用程序的工作?

回答

8

必須連接時的默認標準輸入到搖籃,把這個的build.gradle:

run{ 
    standardInput = System.in 
} 
+3

這個偉大的工程,爲此,由現在看來'gradle這個--console平原運行醜陋提示惱火的人'刪除它。這裏有一個公開的問題https://issues.gradle.org/browse/GRADLE-1147,我發現這個片段。 – nickbdyer

+0

如果不使用應用程序插件,則'standardInput = System.in'行應該在您需要將stdin重定向到其中的任何任務中執行。對我來說,它是在一個自定義[JavaExec](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html)任務中。 –

+0

Dude在我的運行腳本中不起作用。你能解釋更多嗎? –

相關問題