All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nebula.plugin.publishing.ivy.IvyExcludesPlugin.groovy Maven / Gradle / Ivy

/*
 * Copyright 2015 Netflix, Inc.
 *
 * Licensed 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 nebula.plugin.publishing.ivy
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.XmlProvider
import org.gradle.api.artifacts.ModuleDependency
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.publish.ivy.IvyPublication
import org.gradle.util.GradleVersion

class IvyExcludesPlugin implements Plugin {
    @Override
    void apply(Project project) {
        project.plugins.apply IvyBasePublishPlugin

        if (GradleVersion.current() >= GradleVersion.version('2.11')) {
            project.logger.debug("Not applying ivy-excludes logic. This version of Gradle support excludes for Ivy (https://docs.gradle.org/2.11/release-notes#published-ivy-descriptor-files-include-configured-exclusions)")
            return
        }

        project.publishing {
            publications {
                withType(IvyPublication) {
                    descriptor.withXml { XmlProvider xml ->
                        project.plugins.withType(JavaBasePlugin) {
                            def dependencies = xml.asNode()?.dependencies?.dependency

                            project.configurations.runtime.allDependencies
                                    .findAll { it instanceof ModuleDependency }
                                    .collect { it as ModuleDependency }
                                    .findAll { !it.excludeRules.isEmpty() }
                                    .each { md ->
                                        def dep = dependencies.find { it.@org == md.group && it.@name == md.name }
                                        if(dep != null) {
                                            md.excludeRules.each { rule ->
                                                def exclude = dep.appendNode('exclude')
                                                if (rule.group)
                                                    exclude.@org = rule.group
                                                if (rule.module)
                                                    exclude.@module = rule.module
                                            }
                                        }
                                    }
                        }
                    }
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy