You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maven测试中从标准输入(stdin)读取数据?

Maven测试中Java读取stdin挂起的解决办法

你的问题本质是Maven默认的Surefire测试插件会把测试进程的标准输入重定向到空设备(Linux是/dev/null,Windows是NUL),导致终端输入根本传不到测试代码里,自然会一直挂着等待输入。

解决方法分两种:

临时快速解决

直接在运行测试时加参数,让Surefire不拦截标准输入:

mvn test -Dsurefire.useSystemIn=true

如果是比较老的Surefire版本(2.x系列),用这个参数:

mvn test -DforkMode=never

永久配置(推荐)

在项目的pom.xml里修改Surefire插件的配置,一劳永逸:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>3.2.5</version> <!-- 替换成你项目实际使用的插件版本 -->
      <configuration>
        <useSystemIn>true</useSystemIn>
      </configuration>
    </plugin>
  </plugins>
</build>

额外建议

如果你的测试是要自动化运行的,依赖手动输入stdin其实不太合适——毕竟自动化测试应该不需要人工干预。可以把测试输入内容提前写到资源文件里,比如src/test/resources/test-input.txt,然后测试代码读取这个文件:

try (Scanner scanner = new Scanner(Objects.requireNonNull(getClass().getResourceAsStream("/test-input.txt")))) {
    String input = scanner.nextLine();
    // 后续逻辑
}

内容的提问来源于stack exchange,提问作者C0urante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:02:13