Custom Dynamic Version Resolution Strategy

Our corporate version numbering strategy does not match the normal X.Y.Z version numbers. Instead we have the following pattern:

R([1-9][0-9])([A-HJ-NS-Z])([0-9]*). Where the following order applies: R1A01< R1A02< R1A< R1B < R2A

We use dynamic version such as R1A+ and is able to pick up R1A02, R1A03, …, R1A11 and so on. However I would like to be able to define so that R1A+ chooses R1A over any of the numbered versions (R1Axxx) when that is available. Further on R1+ should choose R1B01 over R1A57.

Is it possible to define a custom dynamic version resolution strategy?

Isn’t this more about overriding the latest revision strategy? If ‘R1A+’ picks up ‘R1A’ and ‘R1A[0-9]+’, then it should be the latest revision strategy that defines which is greatest among those. If so, I already asked for this, but it is not possible at the moment.

Yes it could be simplified to a latest revision strategy. Using a maven repo here, is something similar possible there?

Are you using Maven all over the place - on the repository (Maven pom files) and on the client-side (build)? I was using Maven once (2.x) but have switched to Ivy/Gradle long time ago and I was not aware that such a versioning scheme is even possible with Maven. I assume you are using Maven 3.x - if so, is what you are trying to achieve possible with vanilla Maven?

We are using gradle as our build environment, the artifacts are published in a maven/nexus repository. We are currently using dynamic versions, like R1A+ to pick up new versions R1A01, R1A02, … However I would also like to pick up R1A if that one is available.

I have browsed arround in the gradle source code. In the DefaultDependencyResolver (org.gradle.api.internal.artifacts.ivyservice.resolveengine) we have the following:

ModuleConflictResolver conflictResolver;

if (configuration.getResolutionStrategy().getConflictResolution() instanceof StrictConflictResolution) {

conflictResolver = new StrictConflictResolver();

} else {

conflictResolver = new LatestModuleConflictResolver();

}

If I could customize the LatestModuleConflicResolver I believe I could achieve want I need.

Is it possible to plug in a custom ModuleConflictResolver? The above snippet indicates that this currently is not possible.

Hi Anders,

This is not currently possible. It’s harder than it might appear as we are moving away from Ivy and therefore can’t expose Ivy types/concepts up in the public API.

We are committed to providing a solution to this general problem though.

Hi Luke, Thanks for this. I fully understand your concerns. Can you give any indication on when a general solution could be available?

Can you give any indication on when a general solution could be available?

Unfortunately I cannot. The best I can say is that it won’t be in 1.4.

There is still work to be done before we can expose such a hook. A few people have asked for this though so it’s not at the end of the queue.