首页 > 解决方案 > 依赖来自同一个依赖项的多个配置

问题描述

我正在开发一个添加 3 个配置的 gradle 插件。one, two, 和three

当我使用这个插件时,我可以将依赖项添加到这些配置中,然后插件根据配置以某种方式使用这些依赖项。这在单个项目中效果很好,但是如果在多项目构建中,我不得不添加以下内容以从我的依赖项目中获取依赖项:

dependencies {
    one project(path: ':projectA', configuration: 'one')
    two project( path: ':projectA', configuration: 'two')
    three project( path: ':projectA', configuration: 'three')
}

有没有办法让当我声明对我的其他项目的依赖时,它会自动拉入我的三个自定义配置:one、、twothree

在我的插件中,我创建了一个使用不同配置的任务:

project.getTasks().create("my-task", MyTask.class, t -> {
    t.getOnes().setFrom(
        project.getConfigurations().getByName("one"));
    t.getTwos().setFrom(
        project.getConfigurations().getByName("two"));
    t.getThrees().setFrom(
        project.getConfigurations().getByName("three"));
});

标签: gradlegradle-plugingradle-dependencies

解决方案


也许该方法DomainObjectCollection.whenObjectAdded可以帮助您。
在此处查找文档: https ://docs.gradle.org/current/javadoc/org/gradle/api/DomainObjectCollection.html

您可以尝试DependencySet从项目的所有配置中获取 a ,即 a DomainObjectCollection,然后调用whenObjectAdded它,然后检查添加的内容是否是您的“projectA”,然后执行您的操作。

或者,您可以使用project.afterEvaluate然后搜索该时间点的所有依赖项。

两种情况下的相同问题是获取所有依赖项的集合并检查它们。

像这样的东西可以工作:

configurations.all().each {
    if (it.allDependencies.contains(project(path: ':projectA'))) {
        // do something
    }
}

推荐阅读