如何通过Gradle从Windows批处理文件传递标准到Java进程?



我有一个简单的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

相关内容

  • 没有找到相关文章

最新更新