You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle插件如何获取自定义Configuration配置下的所有依赖列表

问题根因

Gradle 的项目配置存在固定生命周期顺序:插件的apply方法执行时机早于用户项目build.gradle中dependencies块的执行。你在刚创建完testConfig配置时就直接遍历依赖集合,此时用户声明的依赖还没有被添加到配置中,自然没有输出。

解决方案

将依赖读取逻辑放到项目配置完成后的回调中执行,推荐两种常用实现方式:

方式1:使用 afterEvaluate 监听项目配置完成事件

修改后的插件代码如下:

public class TestPlugin implements Plugin<Project>
{
    public static final String VERSION = "1.0.0";

    @Override
    public void apply(Project project)
    {
        project.getLogger().lifecycle("TestPlugin: " + VERSION);
        Configuration testConfig = project.getConfigurations().create("testConfig");
        testConfig.setCanBeResolved(true);

        // 等项目所有配置完成后再读取依赖
        project.afterEvaluate(p -> {
            for(Dependency dependency : testConfig.getDependencies())
            {
                p.getLogger().lifecycle(" " + dependency.getName());
            }
            
            // 如果需要获取解析后的全量传递依赖,可追加以下逻辑
            // Set<ResolvedArtifact> artifacts = testConfig.getResolvedConfiguration().getResolvedArtifacts();
            // for (ResolvedArtifact artifact : artifacts) {
            //     p.getLogger().lifecycle("Resolved artifact: " + artifact.getFile().getName());
            // }
        });
    }
}

方式2:监听配置的依赖添加事件

如果需要在依赖被添加时就实时处理,可以使用依赖集合的回调:

testConfig.getDependencies().whenObjectAdded(dependency -> {
    project.getLogger().lifecycle("New dependency added: " + dependency.getName());
});

这种方式不需要等整个项目配置完成,每添加一个依赖就会触发一次回调。

测试验证

测试项目build.gradle中按以下方式声明依赖即可正常打印:

plugins {
    id '你的插件id'
}

repositories {
    mavenLocal()
}

dependencies {
    testConfig 'com.example:你的测试依赖坐标:版本号'
}

内容的提问来源于stack exchange,提问作者MisterCow1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:39:02