java - 为什么使用 javac 和 gradle 构建的相同代码表现不同?

标签 java gradle

switch (readChoice()) {
  //options
}

private static int readChoice() {
    String input;
    int choice = -1;
    try {
        input = scanner.next();
        choice = Integer.parseInt(input);
    } catch (NumberFormatException e) {
        logger.error("Error while trying to read choice from the console", e);
        }
    }
    return choice;

}

当我使用 javac 构建此代码时,一切正常。但是当我尝试运行用 gradle 构建的代码时,我得到了这个

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at edu.java.core.cinema.Main.readChoice(Main.java:207)
    at edu.java.core.cinema.Main.main(Main.java:42)

42 - 有开关,207 - 有scanner.next()。 当没有什么可读取时,扫描仪会尝试读取选择。 我刚刚开始学习 gradle,所以也许我在构建方面犯了错误。 我使用 gradle 包装器构建并运行项目

$ gradle wrapper --gradle-version 3.4
$ ./gradlew build
$ ./gradlew run

更新: 有build.gradle文件

apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'edu.java.core.cinema.Main'

repositories {
    mavenCentral()
}

jar {
    baseName = 'lab2'
    version =  '0.1.0'
}

sourceSets.main.java.srcDirs = ["src"]

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
   compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0'

   compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.2'

   compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.2'

   compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'

}

最佳答案

在你的 gradle 构建文件中添加

run {
    standardInput = System.in
}

将“gradle 输入”重定向到system.in。如果不这样做,它是空的,并且在尝试读取输入时会失败。

关于java - 为什么使用 javac 和 gradle 构建的相同代码表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43170311/

相关文章:

java - 从自定义 Spring 的 CommonsHttpInvokerRequestExecutor 切换到 HttpComponentsHttpInvokerRequestExecutor

android - Gradle不选择在lib文件夹下动态复制的库

android - 刷新gradle时Android Studio 1.3.2错误

java - setPreferedSize() 和 setMaximumSize() 之间的区别

java - ZipInputStream 中的 NullPointerException

java - Tomcat:无法找到或加载

android - 错误:尝试添加多个依赖项时无法解决:com.android

java - Android 在 Activity 之间切换

gradle - Gradle:无法应用插件[id 'groovy']

jakarta-ee - com.sun.el.parser.ParseException : Encountered "(" at line when running selenium on jetty