我有一个使用Gradle构建的多项目Spring Boot应用程序.我正在尝试做的是从命令行subprojects使用Spring Boot的bootRun任务来运行各种各样的"ad-hoc"测试gradle bootRun.但是,似乎每个守护进程按顺序启动和停止.有没有办法让我的所有Boot守护进程使用spring-boot插件并行运行?
任何建议将不胜感激 :)
我创建了一个简单的java"echo"应用程序,它接受用户的输入并将其显示给他们以演示该问题.我可以使用IntelliJ的内部"运行"命令,以及执行由...生成的编译的java文件时运行此应用程序gradle build.但是,如果我尝试使用执行应用程序gradle run,我会从扫描程序中抛出NoSuchElementException.
我认为gradle或应用程序插件特别对系统IO做了一些奇怪的事情.
应用
package org.gradle.example.simple;
import java.util.Scanner;
public class HelloWorld {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
String response = input.nextLine();
System.out.println(response);
}
}
Run Code Online (Sandbox Code Playgroud)
的build.gradle
apply plugin: 'java'
version '1.0-SNAPSHOT'
apply plugin: 'java'
jar {
manifest {
attributes 'Main-Class': 'org.gradle.example.simple.HelloWorld'
}
}
apply plugin: 'application'
mainClassName = "org.gradle.example.simple.HelloWorld"
sourceCompatibility = 1.5
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}
Run Code Online (Sandbox Code Playgroud)
有关如何使用此应用程序的任何想法gradle run?
我有一个由几个子项目组成的Gradle项目.我刚刚创建了一个新的,以添加对我想要运行的交互式Groovy shell的支持:
gradle console
Run Code Online (Sandbox Code Playgroud)
要么
gradle console:run
Run Code Online (Sandbox Code Playgroud)
所以我的新console模块的build.gradle文件如下:
apply plugin: 'groovy'
apply plugin:'application'
mainClassName = 'org.codehaus.groovy.tools.shell.Main'
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.2.2'
compile 'org.fusesource.jansi:jansi:1.11'
compile 'commons-cli:commons-cli:1.2'
compile 'jline:jline:2.11'
compile project(':my-module')
}
task(console, dependsOn: 'classes', type: JavaExec) {
main = 'org.codehaus.groovy.tools.shell.Main'
classpath = sourceSets.main.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)
但是,当我跑步gradle :console:run或者gradle console得到类似的东西时:
:console:run
Groovy Shell (2.2.2, JVM: 1.6.0_45)
Type 'help' or '\h' for help.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
groovy:000>
BUILD SUCCESSFUL
Total time: 4.529 secs
giovanni@mylaptop:~/Projects/my-project$
Run Code Online (Sandbox Code Playgroud)
因此,交互式shell似乎已经开始,但它会立即退出.
难道我做错了什么?
编辑:在build.gradle文件中添加以下内容:
run.standardInput = System.in
Run Code Online (Sandbox Code Playgroud)
现在,从输入流中读取标准输入(由于注释). …
我有一个 junit 测试,它需要用户确认先决条件状态,因此在测试进行之前会提示用户。这是用于涉及无法模拟的外部系统的集成测试。这在通过 Eclipse IDE 运行测试时工作正常,但不能通过 Gradle 运行。
我知道这是因为 Gradle 设置了一个空的标准输入。这可以根据以下问题针对运行目标解决:带有 Java 和 gradle 的控制台应用程序。但是,我一直无法为测试目标找到等效的解决方案。
有没有办法接收用户输入以通过 Gradle 运行 junit 测试?
下面给出了我正在使用的测试类的简化版本:
@Test
public void testDigitalRead()
{
Scanner in = new Scanner(System.in);
out.println("Press enter to continue.");
in.nextLine();
// perform testing logic
in.close();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在通过 Gradle 运行时将抛出 java.util.NoSuchElementException ,因为没有要读取的输入。
这个问题解释了如何System.in在运行任务时使用来运行项目中的特定类。
但对我来说,目前它不起作用:尽管我已将application插件和以下几行包含在build.gradle:
mainClassName = "misc.StreamsExp"
run{
standardInput = System.in
}
task stream( type: JavaExec, dependsOn: assemble ){
classpath sourceSets.main.runtimeClasspath
main = "misc.StreamsExp"
}
Run Code Online (Sandbox Code Playgroud)
下面的应用程序代码中的行readLine应该是阻塞的,但事实并非如此:
BufferedReader br = new BufferedReader(new InputStreamReader( System.in ));
String enteredLine = "";
while( enteredLine == null || ! enteredLine.equals( "q" )){
System.out.println( "spuds");
enteredLine = br.readLine();
}
Run Code Online (Sandbox Code Playgroud)
...相反,事情会永远旋转:
土豆土豆
土豆
土豆
...
注意,我使用的是 Windows 10 操作系统,带有 Java 8.91。我尝试过 Windows DOS 控制台和 Cygwin。
NB2 当我在 Eclipse(Gradle STS Eclipse …
gradle ×5
java ×4
blocking ×1
build.gradle ×1
groovy ×1
inputstream ×1
junit ×1
shell ×1
spring ×1
spring-boot ×1
stdin ×1
system.in ×1