Capability version in resolutionStrategy

Here’s our problem: we have a big library com.example.big-library:X that bundles com.example.small-library:Y, and declares it as a capability in the Gradle metadata. We have consumers using small-library alone and consumers using both big-library and small-library.

We would like to enforce that consumers of big-library declare a dependency onsmall-library that matches the exact version provided by big-library (there is some native code involved and using a mismatched version can cause troubles).

E.g. if big-library comes with small-library:3.1 then we want to fail the build if there’s a dependency in the same project to small-library:3.2

Right now we have this resolutionStrategy:

resolutionStrategy.capabilitiesResolution.withCapability("com.example.small-library") {
    def toBeSelected = candidates.find { it.id instanceof ModuleComponentIdentifier && it.id.module.contains('big-library') }
    if (toBeSelected != null) {
        select(toBeSelected)
    }
    because 'use small-library from big-library instead of standalone'
}

Is there a way to update this resolutionStrategy to only resolve if the capabilities are of the same version? I cannot find a way to do that (but it feels like there should be one).

The actual bug is here for the curious: Incompatible glean versions · Issue #11276 · mozilla-mobile/android-components · GitHub

1 Like