gradle - 依赖同一依赖项的多个配置

标签 gradle gradle-plugin gradle-dependencies

我正在开发一个gradle插件,它添加了3种配置。 onetwothree
当我使用此插件时,我可以向这些配置添加依赖项,然后该插件根据配置以某种方式使用这些依赖项。这在单个项目中效果很好,但是,如果在多项目构建中,我不得不添加以下内容以从我的依赖项目中获取依赖项:

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

有没有一种制作方法,当我声明对其他项目的依赖时,它会自动提取我的三个自定义配置:onetwothree
在我的插件中,我创建一个使用不同配置的任务:
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"));
});

最佳答案

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

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

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

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

这样的事情可能会起作用:

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

关于gradle - 依赖同一依赖项的多个配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53529829/

相关文章:

android - 设置库版本问题

java - 运行springboot应用程序的 "gradle bootRun"和 "gradle run"有什么区别?

android - 将 Android 项目从 Github 导入 Android Studio

android - 在实现项目时我面临这个 "Your project contains C++ files but it is not using a supported native build system."

android - 使用 android.tools.lint 执行 JetifyTransform 失败

Android gradle 无法解析 : play-services-basement

android - Gradle、Robolectric 和 Espresso

java - 为什么 gradle 失败并出现包 javax.xml.bind.annotation 不存在错误?

android - Checkstyle Plugin 不添加 gradle 任务

gradle - 如何将 jetty 或 gretty 导入到我的 gradle 脚本中