2016-04-19 16 views
3

ユーザーの入力を受け取り、問題を示すために戻ってきた簡単なJavaの「エコー」アプリケーションを作成しました。 IntelliJの内部「実行」コマンドを使用して、またgradle buildによって生成されたコンパイル済みのJavaファイルを実行する際に、このアプリケーションを問題なく実行できます。しかし、gradle runを使ってアプリケーションを実行しようとすると、スキャナからNoSuchElementExceptionがスローされます。アプリケーションがgradleで起動されたときにjava.util.scannerがNoSuchElementExceptionをスローする

私は、gradleやアプリケーションのプラグインが、具体的にはシステムIOで何か変なことをしていると思います。

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' 
} 

build.gradle

アプリケーション

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); 
    } 
} 

gradle runを使用して、このアプリケーションを動作させるためにどのように任意のアイデア?

答えて

8

あなたはGradleのために、デフォルトの標準入力を配線する必要があり、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

私の実行スクリプトではうまくいきません。もっと説明できますか? –

関連する問題