Specify dependency ranges for resolution

Hi,

I am trying to extend the 3rd party gradle-versions-plugin to allow tweaking the search for updates a bit. In my test-case, I use guava 15.0 as stated dependency, and I pretend I do not want to be informed about any guava new 16.x versions, but instead only about new releases of the 15.x chain.

I would like to exclude all kind of beta versions from being considered. As an example, currently I get this report:

- junit:junit [4.11 -> 4.12-beta-2]
 - org.apache.wicket:wicket-core [6.16.0 -> 7.0.0-M3]
 - org.apache.wicket:wicket-util [6.16.0 -> 7.0.0-M3]
 - org.springframework:spring-core [4.0.6.RELEASE -> 4.1.0.RC2]

None of those are updates I care about, however e.g. the important wicket 6.17.0 update is hidden here. So I wondere whether I can tweak the resolution of dependencies to hide what I don’t want to see. I understand that gradle’s possibilities here are probably somewhat limited by Ivy (or some adapter), I just try to understand what is still possible.

The gradle-version-plugin builds up an artificial set of dependencies with version set to e.g. ‘latest.release’, and then invokes

def conf = project.configurations.detachedConfiguration(latest as Dependency[]).resolvedConfiguration.lenientConfiguration

which I guess is not a mere field accessing chain, but getResolvedConfiguration() actually performs some kind of lookup. For my example case, I first modified the plugin to use ‘15.+’ instead of ‘latest.release’. This works ok, it does not show any 16.* versions.

Next however I would like to be able to exclude versions in finer detail, as an example using the range notation (http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html) E.g. I used ‘(,16.0[’ instead of ‘latest.release’, but that did not have the desired effect

My log says:

00:02:59.445 [main] INFO
org.gradle.api.Project - Using revision '(,16.0[' instead of default 'integration' for DefaultExternalModuleDependency{group='com.google.guava', name='guava', version='15.0', configuration='default'}
00:02:59.445 [main] INFO
org.gradle.api.Project - Using revision '(,16.0[' instead of default 'integration' for DefaultExternalModuleDependency{group='com.google.guava', name='guava-tests', version='15.0', configuration='default'}
00:02:59.446 [main] INFO
org.gradle.api.Project - To resolve [DefaultExternalModuleDependency{group='com.google.guava', name='guava', version='(,16.0[', configuration='default'}, DefaultExternalModuleDependency{group='com.google.guava', name='guava-tests', version='(,16.0[', configuration='default'}]
00:02:59.446 [main] INFO
org.gradle.api.Project - Resolving with repositories:
00:02:59.447 [main] INFO
org.gradle.api.Project -
- maven: file:/home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/
00:02:59.448 [main] DEBUG o.g.a.i.a.i.r.DefaultDependencyResolver - Resolving configuration 'detachedConfiguration1'
00:02:59.449 [main] DEBUG o.g.a.i.a.i.i.m.InMemoryCachedRepositoryFactory - Creating new in-memory cache for repo 'maven' [3cdeb583a50ac6e61d5206979160d676].
00:02:59.450 [main] DEBUG o.g.a.i.a.i.r.g.DependencyGraphBuilder - Visiting configuration :single:unspecified(detachedConfiguration1).
00:02:59.450 [main] DEBUG o.g.a.i.a.i.r.g.DependencyGraphBuilder - Visiting dependency :single:unspecified(detachedConfiguration1) -> com.google.guava:guava:(,16.0[(dependency: com.google.guava#guava;(,16.0[ {detachedConfiguration1=[default]})
00:02:59.450 [main] DEBUG o.g.a.i.a.i.i.RepositoryChainDependencyResolver - Attempting to resolve module 'com.google.guava:guava:(,16.0[' using repositories [maven]
00:02:59.451 [main] DEBUG o.g.a.i.a.r.r.MavenMetadataLoader - parsing maven-metadata: /home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/com/google/guava/guava/maven-metadata.xml
    00:02:59.459 [main] DEBUG o.g.a.i.a.r.r.DefaultExternalResourceArtifactResolver - Loading file:/home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/com/google/guava/guava/16.0-rc1/guava-16.0-rc1.pom
00:02:59.461 [main] DEBUG o.g.a.i.a.i.i.RepositoryChainDependencyResolver - Attempting to resolve module 'com.google.guava:guava-parent:16.0-rc1' using repositories [maven]
00:02:59.462 [main] DEBUG o.g.a.i.a.r.r.DefaultExternalResourceArtifactResolver - Loading file:/home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/com/google/guava/guava-parent/16.0-rc1/guava-parent-16.0-rc1.pom
00:02:59.464 [main] DEBUG o.g.a.i.a.i.i.RepositoryChainDependencyResolver - Attempting to resolve module 'org.sonatype.oss:oss-parent:7' using repositories [maven]
00:02:59.465 [main] DEBUG o.g.a.i.a.r.r.DefaultExternalResourceArtifactResolver - Loading file:/home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
00:02:59.467 [main] DEBUG o.g.a.i.a.r.r.ExternalResourceResolver - Metadata file found for module 'org.sonatype.oss:oss-parent:7' in repository 'maven'.
00:02:59.467 [main] DEBUG o.g.a.i.a.i.i.RepositoryChainDependencyResolver - Using module 'org.sonatype.oss:oss-parent:7' from repository 'maven'
00:02:59.468 [main] DEBUG o.g.a.i.a.r.r.DefaultExternalResourceArtifactResolver - Loading file:/home/kruset/work/java/versions-test/buildSrc/gradle-versions-plugin/build/classes/test/maven/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
00:02:59.471 [main] DEBUG o.g.a.i.a.r.r.ExternalResourceResolver - Metadata file found for module 'com.google.guava:guava-parent:16.0-rc1' in repository 'maven'.
00:02:59.471 [main] DEBUG o.g.a.i.a.i.i.RepositoryChainDependencyResolver - Using module 'com.google.guava:guava-parent:16.0-rc1' from repository 'maven'

I the gap I marked, guava 16.0-rc1 is chosen as a resolution of ‘(,16.0[’. Any idea what goes wrong, and other ideas of how I could achieve my original goal?

Sorry, my problems somehow went away mysteriously, it was a fluke.