具有 Java 9 个模块的 Kotlin - 在模块图中找不到 Main class
Kotlin with Java 9 Modules - Main class cannot be found in the module graph
我正在向我的 Springboot 项目添加黄瓜 'component test'。
我正在使用 @SpringBootTest,因此测试与应用程序共享相同的 JVM(主要 class 除外)。
我在 build.gradle.kts -
中为我的黄瓜测试设置了单独的源集
val SourceSet.kotlin: SourceDirectorySet
get() = project.extensions.getByType<KotlinJvmProjectExtension>().sourceSets.getByName(name).kotlin
sourceSets {
create("cucumber") {
kotlin.srcDirs( "src/cucumber")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}
task<Test>("cucumber") {
description = "Runs the cucumber tests"
group = "verification"
testClassesDirs = sourceSets["cucumber"].output.classesDirs
classpath = sourceSets["cucumber"].runtimeClasspath
useJUnitPlatform()
}
我的项目源集现在看起来像这样 -
我希望测试是黑盒的。
因此,我想阻止我的 'cucumber' 源代码集访问我的 'main' 源代码集中的任何代码。
我正在使用 Java 9 个模块来尝试实现这一点,这是我的 'cucumber' 模块-info.java -
open module at {
requires com.johncooper.reactiveKotlin;
requires ...
}
这是我的 'main' 模块-info.java -
module com.johncooper.reactiveKotlin {
requires spring.boot.autoconfigure;
requires ...
exports com.johncooper.reactiveKotlin;
}
我在 运行 我的 'cucumber' 测试时遇到编译错误 -
Task :compileCucumberKotlin FAILED e: Module com.johncooper.reactiveKotlin cannot be found in the module graph
我尝试将模块-[=45=] 文件放入 java 根文件夹(建议放在另一个 post 中)但没有成功。
有没有人有任何见解?
解决办法是避开Java9个模块,使用Kotlin自带的原生模块功能!
这是 Kotlin 团队的文档 - https://kotlinlang.org/docs/visibility-modifiers.html#modules
我正在向我的 Springboot 项目添加黄瓜 'component test'。 我正在使用 @SpringBootTest,因此测试与应用程序共享相同的 JVM(主要 class 除外)。
我在 build.gradle.kts -
中为我的黄瓜测试设置了单独的源集val SourceSet.kotlin: SourceDirectorySet
get() = project.extensions.getByType<KotlinJvmProjectExtension>().sourceSets.getByName(name).kotlin
sourceSets {
create("cucumber") {
kotlin.srcDirs( "src/cucumber")
compileClasspath += sourceSets["main"].output + configurations["testRuntimeClasspath"]
runtimeClasspath += output + compileClasspath + sourceSets["test"].runtimeClasspath
}
}
task<Test>("cucumber") {
description = "Runs the cucumber tests"
group = "verification"
testClassesDirs = sourceSets["cucumber"].output.classesDirs
classpath = sourceSets["cucumber"].runtimeClasspath
useJUnitPlatform()
}
我的项目源集现在看起来像这样 -
我希望测试是黑盒的。 因此,我想阻止我的 'cucumber' 源代码集访问我的 'main' 源代码集中的任何代码。
我正在使用 Java 9 个模块来尝试实现这一点,这是我的 'cucumber' 模块-info.java -
open module at {
requires com.johncooper.reactiveKotlin;
requires ...
}
这是我的 'main' 模块-info.java -
module com.johncooper.reactiveKotlin {
requires spring.boot.autoconfigure;
requires ...
exports com.johncooper.reactiveKotlin;
}
我在 运行 我的 'cucumber' 测试时遇到编译错误 -
Task :compileCucumberKotlin FAILED e: Module com.johncooper.reactiveKotlin cannot be found in the module graph
我尝试将模块-[=45=] 文件放入 java 根文件夹(建议放在另一个 post 中)但没有成功。
有没有人有任何见解?
解决办法是避开Java9个模块,使用Kotlin自带的原生模块功能! 这是 Kotlin 团队的文档 - https://kotlinlang.org/docs/visibility-modifiers.html#modules