【发布时间】:2020-03-09 09:45:48
【问题描述】:
我的项目是使用 Java JDK 11 的 Gradle 依赖 JavaFX 项目。该项目是使用 Gradle 项目的默认结构创建的。所以在 src 下它有“main”和“test”,每一个都由一个“java”和一个“resource”目录组成。
要使用 Jenkins 设置 CI 管道,gradlew test 要求以与我的 IDE (IntelliJ) 到目前为止相同的方式运行所有测试。有趣的是,经过数小时的尝试,我无法让它工作。
In the IntelliJ run configuration it tests "all in package", within the .test package, and this works just fine (click for screenshot)下面是build.gradle文件的所有相关部分,请注意,为简单起见,我省略了所有不相关的部分。
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
}
test {
useJUnitPlatform()
}
application {
mainClassName = 'FP.EDM.main/edm.Main'
}
每当我运行 gradlew test 命令时,都会出现以下两个错误:
java.lang.RuntimeException: Unable to parse --add-opens <module>/<package>: FP.EDM.main/
Could not write standard input to Gradle Test Executor 1.
java.io.IOException: The pipe is being closed
at java.base/java.io.FileOutputStream.writeBytes(Native Method)
at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354)
at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)
at java.base/java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142)
at org.gradle.process.internal.streams.ExecOutputHandleRunner.forwardContent(ExecOutputHandleRunner.java:67)
at org.gradle.process.internal.streams.ExecOutputHandleRunner.run(ExecOutputHandleRunner.java:52)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.base/java.lang.Thread.run(Thread.java:834)
我尝试过的另一种方法是使用 useJUnit() 命令而不是 useJUnitPlatform()。乍一看,这似乎工作得很好,但是当我使用它时,根本没有发现任何测试。我的假设是测试的默认模块设置不正确。但是,我发现无法在网上任何地方设置或不提及此内容。请告诉我你的想法:)
PS。我宁愿不降级到 JUnit 4.x,因为那需要我重写所有这些(工作)测试。
【问题讨论】:
-
该错误消息表明由于使用了模块,Java 工具/选项存在问题。鉴于您使用的是最新的 Gradle 版本 - 如果您还没有,请先尝试 - 需要有关您的项目设置的更多信息。我建议您创建一个具有最少失败设置的公共存储库/项目。
标签: java gradle javafx junit junit5