private static void configureConfigurations()

in buildSrc/src/main/groovy/org/elasticsearch/hadoop/gradle/BuildPlugin.groovy [171:249]


    private static void configureConfigurations(Project project) {
        // Create a configuration that will hold common test dependencies to be shared with all of a project's test sources, including variants if present
        Configuration sharedTestImplementation = project.configurations.create(SHARED_TEST_IMPLEMENTATION_CONFIGURATION_NAME)
        project.configurations.getByName(JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME).extendsFrom(sharedTestImplementation)
        project.getPlugins().withType(SparkVariantPlugin).whenPluginAdded {
            SparkVariantPluginExtension sparkVariants = project.getExtensions().getByType(SparkVariantPluginExtension.class)
            sparkVariants.featureVariants { SparkVariant variant ->
                Configuration variantTestImplementation = project.configurations.getByName(variant.configuration(SourceSet.TEST_SOURCE_SET_NAME, JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME))
                variantTestImplementation.extendsFrom(sharedTestImplementation)
            }
        }

        if (project != project.rootProject) {
            // Set up avenues for sharing source files between projects in order to create embedded Javadocs
            // Import source configuration
            Configuration additionalSources = createConfiguration(project, 'additionalSources', false, true, 'java-source', 'sources')

            // Export source configuration - different from 'sourcesElements' which contains sourceJars instead of source files
            Configuration sourceElements = createConfiguration(project, 'sourceElements', true, false, 'java-source', 'sources')
            sourceElements.extendsFrom(additionalSources)

            // Import javadoc sources
            createConfiguration(project, 'javadocSources', false, true, 'javadoc-source', 'sources')

            // Export javadoc source configuration - different from 'javadocElements' which contains javadocJars instead of java source files used to generate javadocs
            Configuration javadocSourceElements = createConfiguration(project, 'javadocSourceElements', true, false, 'javadoc-source', 'sources')
            javadocSourceElements.extendsFrom(additionalSources)

            // Export configuration for archives that should be in the distribution
            // TODO: Should we ditch this in favor of just using the built in exporting configurations? all three artifact types have them now
            createConfiguration(project, 'distElements', true, false, 'packaging')

            // Do the same for any variants if the project has them
            project.getPlugins().withType(SparkVariantPlugin).whenPluginAdded {
                SparkVariantPluginExtension sparkVariants = project.getExtensions().getByType(SparkVariantPluginExtension.class)
                sparkVariants.featureVariants { SparkVariant variant ->
                    Configuration vAdditionalSources = createConfiguration(project, variant.configuration('additionalSources'), false, true, 'java-source', 'sources')

                    Configuration vSourceElements = createConfiguration(project, variant.configuration('sourceElements'), true, false, 'java-source', 'sources')
                    vSourceElements.extendsFrom(vAdditionalSources)

                    createConfiguration(project, variant.configuration('javadocSources'), false, true, 'javadoc-source', 'sources')

                    Configuration vJavadocSourceElements = createConfiguration(project, variant.configuration('javadocSourceElements'), true, false, 'javadoc-source', 'sources')
                    vJavadocSourceElements.extendsFrom(vAdditionalSources)

                    createConfiguration(project, variant.configuration('distElements'), true, false, 'packaging')
                }
                sparkVariants.all { SparkVariant variant ->
                    // Set capabilities on ALL variants if variants are enabled.
                    // These are required to differentiate the different producing configurations from each other when resolving artifacts for consuming configurations.
                    String variantCapability = variant.getCapabilityName(project.getVersion())
                    project.configurations.getByName(variant.configuration('sourceElements')).getOutgoing().capability(variantCapability)
                    project.configurations.getByName(variant.configuration('javadocSourceElements')).getOutgoing().capability(variantCapability)
                    project.configurations.getByName(variant.configuration('distElements')).getOutgoing().capability(variantCapability)
                }
            }
        }

        if (project.path.startsWith(":qa")) {
            return
        }

        // force all dependencies added directly to compile/testCompile to be non-transitive, except for Elasticsearch projects
        disableTransitiveDependencies(project, project.configurations.api)
        disableTransitiveDependencies(project, project.configurations.implementation)
        disableTransitiveDependencies(project, project.configurations.compileOnly)
        disableTransitiveDependencies(project, project.configurations.runtimeOnly)

        project.getPlugins().withType(SparkVariantPlugin).whenPluginAdded {
            SparkVariantPluginExtension sparkVariants = project.getExtensions().getByType(SparkVariantPluginExtension.class)
            sparkVariants.featureVariants { SparkVariant variant ->
                disableTransitiveDependencies(project, project.getConfigurations().findByName(variant.configuration("api")))
                disableTransitiveDependencies(project, project.getConfigurations().findByName(variant.configuration("implementation")))
                disableTransitiveDependencies(project, project.getConfigurations().findByName(variant.configuration("compileOnly")))
                disableTransitiveDependencies(project, project.getConfigurations().findByName(variant.configuration("runtimeOnly")))
            }
        }
    }