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

时间:2017-11-08 11:27:30

标签: gradle gradle-plugin

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

我评估了DependencyHandlerArtifactResolutionQuery,但我无法弄清楚在哪里以及如何添加依赖关系并在mavenCentral资源库中解析它

maven的类似编码确实看起来很容易

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

  artifactResolver.resolve(artifact, remoteRepositories, localRepository); 

所以我猜/希望在gradle中有一种类似的简单方法,我只是没有看到它

此致 的Mathias

更新1:

所以这里有一些我尝试的东西,从不同的尝试疯狂地c& p。值得一提的是,我想下载的依赖项有分类器ZIP,所以在我的build.gradle中写的是正常的

compile 'group:artifact: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();

1 个答案:

答案 0 :(得分:1)

我认为在Gradle插件中以编程方式下载依赖项的最简单方法与在构建脚本中执行此操作相同。只需创建新配置,添加依赖关系并解析配置。观看下面的示例如何在Java中使用它(Gradle插件的首选语言):

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();

对于此示例,配置名称("download")可以是任何尚未用作配置名称的字符串(例如compileruntime) 。由于配置将在之后解决,因此每当您重复使用此代码段时(或多次调用它),您都必须使用其他名称。