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

标签 gradle gradle-plugin

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

我评估了 DependencyHandlerArtifactResolutionQuery 但我无法弄清楚在何处以及如何添加依赖项并在 mavenCentral 存储库中解析它

类似的 Maven 编码看起来相当简单

Artifact artifact = artifactFactory.createArtifactWithClassifier(groupId, artifactId, version, type, classifier);
      
artifactResolver.resolve(artifact, remoteRepositories, localRepository);

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

问候 马蒂亚斯

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

最佳答案

我认为在 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”)可以是尚未用作配置名称的任何字符串(例如compile) > 或运行时)。由于配置将在之后解析,因此每当您重复使用此代码片段(或者多次调用它)时,您都必须使用另一个名称。

关于Gradle 插件以编程方式下载依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47178539/

相关文章:

android - 通过 Android Studio 菜单和 gradlew 命令行运行 lint 的区别

android - 关闭 React Native Android apk Release 上的调试菜单

gradle - 无法使用BuildScopeServices.createScriptPluginFactory()创建ScriptPluginFactory类型的服务

jruby - 简单的 gradle 构建运行 compass 失败

android - 针对 Android gradle 构建工具 3.3.0 构建时关于 bundle 的 Kotlin 运行时库的警告

java - 从 Java 中的 gradle.build 获取属性

Gradle:无法存储任务输入属性。无法序列化值为 'myInput' 的属性 '[null]'

gradle - 仅通过gradle下载节点8.17.0(如果系统中未安装该节点)

java - 具有多个 JDK 的 Gradle Maven 发布插件

Gradle java-platform 插件和平台定义