【问题标题】:How i can take all managed version dependencies from Spring Dependencies Managment Plugin within my custom plugin?如何在我的自定义插件中从 Spring Dependency Management Plugin 获取所有托管版本依赖项?
【发布时间】:2017-06-11 20:25:50
【问题描述】:

我正在编写我的自定义 java gradle 插件来检查依赖项。我也申请 Spring Gradle Dependency Managment plugin。但是我无法从此插件中获取托管库版本的列表。我使用下一个代码:

import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension;
import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.*;

import java.util.Map;

public class MyDependencyManagementPlugin implements Plugin<Project> {

    public void apply(Project project) {

        for (Configuration config : project.getConfigurations()) {

            config.resolutionStrategy(
                    strategy -> {
                        final DependencyManagementExtension container = project.getExtensions().getByType(DependencyManagementExtension.class);
                        Map<String, String> managedVersions = container.getManagedVersions();
                        System.out.println("Libraries from Spring Dependency Management Plugin: " + managedVersions.toString());

                        strategy.eachDependency(new Action<DependencyResolveDetails>() {
                            @Override
                            public void execute(DependencyResolveDetails dependencyResolveDetails) {

                                System.out.println("!!!! " + dependencyResolveDetails.getRequested().getGroup() + ':' + dependencyResolveDetails.getRequested().getName() + ':' + dependencyResolveDetails.getRequested().getVersion() + " -> " + dependencyResolveDetails.getTarget().getVersion());

                            }
                        });
                        strategy.failOnVersionConflict();
                    }
            );
        }
    }
}

在我的测试项目中,我使用了包括 Spring 框架:

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework:spring-core:4.2.5.RELEASE'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

但应用我的任务后,它总是返回空地图。此外,如果我从 io Spring Dependency Management 插件调用 dependencyManagement 任务,它也会返回空列表。 如果我不从我的自定义插件中调用 etManagedVersions(),来自 io Spring 依赖管理插件的 dependencyManagement 任务可以正常工作。

谢谢

【问题讨论】:

    标签: gradle dependency-management gradle-plugin spring-io


    【解决方案1】:

    听起来您在调用getManagedVersions() 之前没有机会配置任何依赖项管理。尝试通过在 Configuration 上使用 beforeResolve 来推迟该逻辑

    【讨论】:

    • 是的,你是对的。如果我在构建脚本的末尾应用我的 pligin 一切正常。谢谢
    猜你喜欢
    • 2019-02-27
    • 2022-01-09
    • 1970-01-01
    • 2021-05-18
    • 2014-05-21
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多