我有以下Gradle项目结构:
project-root/
├── adapters/
│ ├── adapter1/
│ │ ├── main
│ │ └── test
│ ├── adapter2/
│ │ ├── main
│ │ └── test
│ └── adapter3/
│ ├── main
│ └── test
└── app-spring-boot/
├── main
├── test
└── integrationTest
在app-spring-boot
模块中,适配器仅作为运行时依赖项包括在内:
// project-root/app-spring-boot/build.gradle.kts
dependencies {
runtimeOnly(project(":adapters:adapter1")
runtimeOnly(project(":adapters:adapter2")
runtimeOnly(project(":adapters:adapter3")
}
在integrationTest
源代码集的app-spring-boot
模块中,我希望能够在编译时访问所有依赖项,不仅可以直接从app-spring-boot
访问,还可以从所有包含的:adapters
项目访问。
我使用了以下配置:
// project-root/app-spring-boot/build.gradle.kts
plugins {
`jvm-test-suite`
}
testing {
suites {
val test by getting(JvmTestSuite::class)
val integrationTest by registering(JvmTestSuite::class) {
useJUnitJupiter()
dependencies {
implementation(project())
}
sources {
compileClasspath += sourceSets.main.get().runtimeClasspath
}
}
}
}
compileClasspath += sourceSets.main.get().runtimeClasspath
就能做到这一点,而且所包含的runtimeOnly
项目中的所有依赖项都可以在编译时访问,但我想知道Gradle的正确惯用方法是什么,尤其是在我看到@chalimartinescomment之后。
1条答案
按热度按时间sqyvllje1#
我同意您找到的评论,说添加到编译类路径不是正确的方法,因为您最终会得到重复的依赖项。
当应用测试套件插件时,它将创建一组配置,这些配置类似于来自
main
和test
源集的配置,并以测试套件的名称作为前缀。因为您的测试套件名为integrationTest
,所以“实现”配置名为integrationTestImplementation
。有了这个,你可以通过测试套件的这个实现配置扩展主源代码集中的常规
runtimeClasspath
配置,将运行时依赖项添加到编译类路径中。