如何在 gradle 中共享兄弟多项目之间的依赖关系?
How to share dependencies between sibling multi-projects in gradle?
我的项目使用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-starter-test。我做了很多摆弄,试图表达类似“project-a 的 testCompile 应该具有与 lemur-common 相同的依赖关系”之类的东西,但我还没有让它工作。
可以用Gradle表达吗?有人知道怎么做吗?
您需要创建自定义 Gradle 插件。
作为所有项目目录的兄弟,创建一个 buildSrc 目录,它本身将有一个 Gradle 文件(它需要像其他所有内容一样构建)。在 src 下制作 gradle 文件,这将是你的插件。将所有共享 gradle 代码(您发布的依赖项块)放入该文件中。例如:
- buildSrc
|── build.gradle
|── settings.gradle
|── src
|── main
|── groovy
|── unit-test-dependencies.gradle
然后,在 lemur-common、projectA 等的 build.gradle 添加这一行
plugins {
id 'unit-test-dependencies'
}
应该可以了。 Gradle 此功能的文档位于:https://docs.gradle.org/current/samples/sample_convention_plugins.html
我的项目使用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-starter-test。我做了很多摆弄,试图表达类似“project-a 的 testCompile 应该具有与 lemur-common 相同的依赖关系”之类的东西,但我还没有让它工作。
可以用Gradle表达吗?有人知道怎么做吗?
您需要创建自定义 Gradle 插件。
作为所有项目目录的兄弟,创建一个 buildSrc 目录,它本身将有一个 Gradle 文件(它需要像其他所有内容一样构建)。在 src 下制作 gradle 文件,这将是你的插件。将所有共享 gradle 代码(您发布的依赖项块)放入该文件中。例如:
- buildSrc
|── build.gradle
|── settings.gradle
|── src
|── main
|── groovy
|── unit-test-dependencies.gradle
然后,在 lemur-common、projectA 等的 build.gradle 添加这一行
plugins {
id 'unit-test-dependencies'
}
应该可以了。 Gradle 此功能的文档位于:https://docs.gradle.org/current/samples/sample_convention_plugins.html