Skip to content

Instantly share code, notes, and snippets.

@Ithildir
Created September 3, 2016 00:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Ithildir/b2fb163216d6dd96ca29c304bb2f3ce9 to your computer and use it in GitHub Desktop.
Save Ithildir/b2fb163216d6dd96ca29c304bb2f3ce9 to your computer and use it in GitHub Desktop.
Exclude snapshots on range dependencies
import org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme
apply plugin: "java"
apply plugin: "maven"
group = "com.example"
String installVersion = System.getProperty("installVersion")
if (installVersion) {
version = installVersion
}
def versionSelectorScheme = gradle.services.get(VersionSelectorScheme)
configurations {
stuff {
configuration ->
resolutionStrategy {
componentSelection {
all {
componentSelection ->
def candidate = componentSelection.candidate
def dependency = configuration.dependencies.find {
it.group == candidate.group && it.name == candidate.module
}
def versionSelector = versionSelectorScheme.parseSelector(dependency.version)
if (!versionSelector.matchesUniqueVersion() && candidate.version.endsWith("-SNAPSHOT")) {
componentSelection.reject "only releases are allowed for ${dependency}"
}
}
}
}
}
}
dependencies {
stuff "com.example:test-version:[1.1.0,1.9.0)"
stuff "com.liferay.portal:com.liferay.portal.kernel:2.6.0"
}
repositories {
mavenLocal()
mavenCentral()
}
task printMe << {
configurations.stuff.each {
println it.name
}
}
@s-ven
Copy link

s-ven commented Oct 28, 2020

This is the configurations block for gradle 6+

def versionSelectorScheme = gradle.services.get(org.gradle.api.internal.artifacts.ivyservice.ivyresolve.strategy.VersionSelectorScheme)
configurations {
    all.resolutionStrategy.componentSelection.all {
        if (candidate.version.endsWith('-SNAPSHOT')) {
            def dependency = allDependencies.find { it.group == candidate.group && it.name == candidate.module }
            if (dependency && !versionSelectorScheme.parseSelector(dependency.version).matchesUniqueVersion()) {
                reject "only releases are allowed for ${dependency}"
            }
        }
    }
}

@jantobola
Copy link

jantobola commented Dec 17, 2020

This is Kotlin version (tested with Gradle 6.7.1):

import org.gradle.kotlin.dsl.*

val versionSelectorScheme = gradle.serviceOf<VersionSelectorScheme>()

configurations.all {
    resolutionStrategy.componentSelection.all {
        if (candidate.version.endsWith("-SNAPSHOT")) {
            allDependencies.find { it.group == candidate.group && it.name == candidate.module }?.let {
                if (!versionSelectorScheme.parseSelector(it.version).matchesUniqueVersion()) {
                    reject("Only releases are allowed for dynamic versions ($it)")
                }    
            }
        }
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment