如何在 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