diff --git a/build.gradle b/build.gradle index 86ed2c0bcf08..2a8b209adae7 100644 --- a/build.gradle +++ b/build.gradle @@ -428,15 +428,11 @@ gradle.projectsEvaluated { } allprojects { - tasks.register('resolveAllDependencies') { + tasks.register('resolveAllDependencies', org.elasticsearch.gradle.ResolveAllDependencies) { + configs = project.configurations if (project.path.contains("fixture")) { dependsOn tasks.withType(ComposePull) } - doLast { - configurations.findAll { it.isCanBeResolved() && - ((it instanceof org.gradle.internal.deprecation.DeprecatableConfiguration) && it.canSafelyBeResolved()) - }.each { it.resolve() } - } } // helper task to print direct dependencies of a single task diff --git a/buildSrc/src/main/groovy/org/elasticsearch/gradle/ResolveAllDependencies.java b/buildSrc/src/main/groovy/org/elasticsearch/gradle/ResolveAllDependencies.java new file mode 100644 index 000000000000..280411790a04 --- /dev/null +++ b/buildSrc/src/main/groovy/org/elasticsearch/gradle/ResolveAllDependencies.java @@ -0,0 +1,52 @@ +/* + * Licensed to Elasticsearch under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.elasticsearch.gradle; + +import org.gradle.api.DefaultTask; +import org.gradle.api.artifacts.Configuration; +import org.gradle.api.tasks.TaskAction; +import org.gradle.internal.deprecation.DeprecatableConfiguration; + +import java.util.Collection; + +import static org.elasticsearch.gradle.DistributionDownloadPlugin.DISTRO_EXTRACTED_CONFIG_PREFIX; + +public class ResolveAllDependencies extends DefaultTask { + + Collection configs; + + @TaskAction + void resolveAll() { + configs.stream().filter(it -> canBeResolved(it)).forEach(it -> it.resolve()); + } + + static boolean canBeResolved(Configuration configuration) { + if (configuration.isCanBeResolved() == false) { + return false; + } + if (configuration instanceof org.gradle.internal.deprecation.DeprecatableConfiguration) { + var deprecatableConfiguration = (DeprecatableConfiguration) configuration; + if (deprecatableConfiguration.canSafelyBeResolved() == false) { + return false; + } + } + return configuration.getName().startsWith(DISTRO_EXTRACTED_CONFIG_PREFIX) == false; + } +} diff --git a/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java b/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java index 42c0ec5e3179..b935a75116aa 100644 --- a/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java +++ b/buildSrc/src/main/java/org/elasticsearch/gradle/DistributionDownloadPlugin.java @@ -56,6 +56,7 @@ public class DistributionDownloadPlugin implements Plugin { private static final String FAKE_SNAPSHOT_IVY_GROUP = "elasticsearch-distribution-snapshot"; private static final String DOWNLOAD_REPO_NAME = "elasticsearch-downloads"; private static final String SNAPSHOT_REPO_NAME = "elasticsearch-snapshots"; + public static final String DISTRO_EXTRACTED_CONFIG_PREFIX = "es_distro_extracted_"; private NamedDomainObjectContainer distributionsContainer; private NamedDomainObjectContainer distributionsResolutionStrategiesContainer; @@ -88,7 +89,7 @@ public class DistributionDownloadPlugin implements Plugin { private void setupDistributionContainer(Project project, Provider dockerSupport) { distributionsContainer = project.container(ElasticsearchDistribution.class, name -> { Configuration fileConfiguration = project.getConfigurations().create("es_distro_file_" + name); - Configuration extractedConfiguration = project.getConfigurations().create("es_distro_extracted_" + name); + Configuration extractedConfiguration = project.getConfigurations().create(DISTRO_EXTRACTED_CONFIG_PREFIX + name); extractedConfiguration.getAttributes().attribute(ArtifactAttributes.ARTIFACT_FORMAT, ArtifactTypeDefinition.DIRECTORY_TYPE); return new ElasticsearchDistribution(name, project.getObjects(), dockerSupport, fileConfiguration, extractedConfiguration); });