Gradle插件以编程方式下载依赖项

Gradle插件以编程方式下载依赖项,gradle,gradle-plugin,Gradle,Gradle Plugin,目前,我正在编写一个gradle插件,需要在给定任务中以编程方式添加和下载maven依赖项 我评估了DependencyHandler和ArtifactResolutionQuery,但我不知道在哪里以及如何添加依赖项并在mavenCentral存储库中解析它 maven的类似编码看起来相当容易 Artifact artifact = artifactFactory.createArtifactWithClassifier(groupId, artifactId, version, type

目前,我正在编写一个gradle插件,需要在给定任务中以编程方式添加和下载maven依赖项

我评估了
DependencyHandler
ArtifactResolutionQuery
,但我不知道在哪里以及如何添加依赖项并在mavenCentral存储库中解析它

maven的类似编码看起来相当容易

  Artifact artifact = artifactFactory.createArtifactWithClassifier(groupId, artifactId, version, type, classifier);

  artifactResolver.resolve(artifact, remoteRepositories, localRepository); 
所以我想/希望在格拉德有一个类似的简单方法,我只是没有看到它

问候 马蒂亚斯

更新1:

这里是我尝试过的一些东西,从不同的尝试中得到的c&p。值得一提的是,我要下载的依赖项具有分类器ZIP,这在我编写的build.gradle中很正常

compile'组:工件:version@zip

获取文件

        ComponentIdentifier componentIdentifier = new DefaultModuleComponentIdentifier("com.sap.cloud",
                "neo-java-web-sdk", "3.39.10");

        System.out.println("CompIdentifier = " + componentIdentifier.getDisplayName());
        //getProject().getDependencies().add("compile", componentIdentifier.getDisplayName());



        Configuration configuration = getProject().getConfigurations().getByName("compile");
        org.gradle.api.artifacts.Dependency dep2 = new DefaultExternalModuleDependency("com.sap.cloud",
                "neo-java-web-sdk", "3.39.10");

        boolean depList = configuration.getDependencies().add(dep2);
//        
        configuration.forEach(file -> {
            getProject().getLogger().lifecycle("Found project dependency @ " + file.getAbsolutePath());
        });
        Set<File> files =  configuration.resolve();
        for (File file2 : files) {
            System.out.println("Files: " + file2.getName());
        }

        DependencyHandler dep =  getProject().getDependencies();
        ComponentModuleMetadataHandler modules = dep.getModules();

        ArtifactResolutionQuery a = getProject().getDependencies().createArtifactResolutionQuery()
                .forComponents(componentIdentifier).withArtifacts(MavenModule.class, SourcesArtifact.class);
        ArtifactResolutionResult r = a.execute();
        Set<ComponentArtifactsResult> set = r.getResolvedComponents();
        Set<ComponentResult> c = r.getComponents();
ComponentIdentifier ComponentIdentifier=新的DefaultModuleComponentIdentifier(“com.sap.cloud”,
“neo java web sdk”、“3.39.10”);
System.out.println(“CompIdentifier=“+componentifier.getDisplayName());
//getProject().getDependencies().add(“compile”,componentifier.getDisplayName());
配置配置=getProject().getConfigurations().getByName(“编译”);
org.gradle.api.artifacts.dep2=新的DefaultExternalModuleDependence(“com.sap.cloud”,
“neo java web sdk”、“3.39.10”);
布尔depList=configuration.getDependencies().add(dep2);
//        
configuration.forEach(文件->{
getProject().getLogger().lifecycle(“找到项目依赖项@”+文件.getAbsolutePath());
});
Set files=configuration.resolve();
用于(文件2:文件){
System.out.println(“文件:+file2.getName());
}
DependencyHandler dep=getProject().getDependencies();
ComponentModuleMetadataHandler模块=dep.getModules();
ArtifactResolutionQuery a=getProject().getDependencies().createArtifactResolutionQuery()
.forComponents(componentIdentifier).withArtifacts(MavenModule.class,SourcesArtifact.class);
ArtifactResolutionResult r=a.execute();
Set=r.getResolvedComponents();
设置c=r.getComponents();

我认为在Gradle插件中以编程方式下载依赖项的最简单方法与在构建脚本中下载依赖项相同。只需创建一个新配置,添加依赖项并解析配置。请看下面的示例,这在Java(Gradle插件的首选语言)中是如何工作的:


对于本例,配置的名称(
“下载”
)可以是尚未用作配置名称的任何字符串(如
编译
运行时
)。由于配置将在以后解决,因此每当您重新使用此代码段时(或者如果您多次调用它),您必须使用另一个名称。

关于?@lu.koerfer的示例如何更新了我的问题。非常感谢,我将在明天试用它。行create(download)具体做什么?它创建了一个名为
download
的新配置。正如我在回答中试图解释的那样,您可以简单地将其更改为其他内容。在我自己的插件中,我发现搜索很有用,如果缺少,可以创建一个配置,在其中添加正常的默认依赖项。我认为最好将
project.getConfigurations().create(“download”)
替换为
project.getConfigurations().detachedConfiguration()
因为将此辅助配置添加到
ConfigurationContainer
是一个不希望的副作用。
Configuration config = project.getConfigurations().create("download");
config.setTransitive(false); // if required
project.getDependencies().add(config.getName(), "com.sap.cloud:neo-java-web-sdk:3.39.10@zip");
File file = config.getSingleFile();