我有一个简单的Windows批处理文件,调用Gradle:
@echo off
gradlew app:run
Gradle然后运行Java程序:
plugins {
application
}
application {
mainClass.set("org.hertsig.MyApp")
}
程序从stdin中读取。当我直接从IntelliJ运行run
任务时,它工作得很好。但是通过批处理文件运行它,不会让Java应用程序看到来自stdin的输入。
如何通过我的批处理文件连接stdin ?
请注意,这是关于运行时生成的问题的输入,所以命令行参数、文本文件中的管道或系统属性都不行。
Windows 10, Gradle 7.2, Java 11.0.2
我创建了一个非常基本的程序,通过Gradle 7.4.2 (gradlew init
)响应用户输入:
package ConsoleApp1;
import java.util.Scanner;
public class App {
public String getGreeting() {
return "Hello World!";
}
public static void main(String[] args) {
System.out.println(new App().getGreeting());
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
System.out.println("You typed: " + scan.next());
}
}
}
build.gradle
plugins {
id 'application'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit test framework.
testImplementation 'junit:junit:4.13.2'
// This dependency is used by the application.
implementation 'com.google.guava:guava:30.1.1-jre'
}
application {
// Define the main class for the application.
mainClass = 'ConsoleApp1.App'
}
如果我像这样运行:gradlew app:run
,它只是在打印Hello World!
后退出。
如果我添加
run {
standardInput = System.in
}
并运行它,我可以提供控制台输入:
c:workjavaworkspaceConsoleApp1>gradlew app:run -q --console=plain
Hello World!
Y
You typed: Y
Z
You typed: Z
bat
文件也可以:
c:workjavaworkspaceConsoleApp1>b.bat
Hello World!
Y
You typed: Y
Z
You typed: Z