首页 > 解决方案 > Gradle 运行任务在尝试使用 System.in 时抛出 java.util.NoSuchElementException

问题描述

我整晚都在用头撞墙。所以我有一个 build.gradle.kts:

plugins {
    // Apply the java plugin to add support for Java
    java

    // Apply the application plugin to add support for building a CLI application.
    application
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // This dependency is used by the application.
    implementation("com.google.guava:guava:28.2-jre")

    // Use JUnit test framework
    testImplementation("junit:junit:4.12")

    // Use Google Protocol Buffers
    implementation("com.google.protobuf:protobuf-java:3.11.0")
}

application {
    // Define the main class for the application.
    mainClassName = "carnival.EntryPoint"
}

当我尝试从终端获取用户输入时new Scanner(System.in),我得到了这个:

> Task :run FAILED
Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1478)
        at carnival.App.run(App.java:56)
        at carnival.EntryPoint.main(EntryPoint.java:9)

FAILURE: Build failed with an exception.

所以我尝试制作自己的运行任务:

/// ...
// removed application plugin

sourceSets {
    main {
        java.srcDir("src/main/java")
    }
}

tasks.register<JavaExec>("run") {
    main = "carnival.EntryPoint"
    standardInput = System.`in`
}

但显然我没有正确设置源目录,因为我得到以下信息:

Error: Could not find or load main class carnival.EntryPoint
Caused by: java.lang.ClassNotFoundException: carnival.EntryPoint

任何帮助将不胜感激。

标签: javakotlingradleexception

解决方案


推荐阅读