我的项目使用Gradle的多项目系统。我的大部分项目都包括"狐猴"。像这样的库
dependencies {
compile project(":lemur-common")
}
"lemur-common"也有一个单元测试目录,它有一个有点复杂的依赖语句。
dependencies {
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.3.9.RELEASE'
testCompile group: 'org.mockito', name: 'mockito-inline', version: '3.5.6'
constraints {
implementation('org.mockito:mockito-core:3.5.6') {
because 'Fixes illegal reflective access warning'
}
}
}
现在,我的所有其他项目都需要有相同的行,因为它们都使用spring-boot-start -test。我做了相当多的改动,试图表达像"project-a’s testCompile应该与lemur_common具有相同的依赖关系"这样的东西。但我还没有让它工作。
可以在Gradle中表达吗?有人知道怎么做吗?
你需要创建一个自定义Gradle插件。
作为所有项目目录的兄弟目录,创建一个buildSrc目录,它本身将有一个Gradle文件(它需要像其他所有东西一样构建)。在src下创建gradle文件,这将是你的插件。把所有共享的gradle代码(你发布的依赖块)放在那个文件中。例如:
- buildSrc
|── build.gradle
|── settings.gradle
|── src
|── main
|── groovy
|── unit-test-dependencies.gradle
然后,在构建中。添加以下行
plugins {
id 'unit-test-dependencies'
}
应该可以了。Gradle关于这个特性的文档在这里:https://docs.gradle.org/current/samples/sample_convention_plugins.html