Skip to content

Range Resolver

Declare the version ranges you accept. Resolve them against your repositories. Lock the answer in a file you can read, diff and share.
pom.deps
repository https://repo1.maven.org/maven2/ as central;
// Accept any 2.x release of Jackson, newest first, but never a release candidate.
resolve highest com.fasterxml.jackson.core:jackson-databind:[2.17.0,3.0.0) via central filtering /^.*(rc|SNAPSHOT).*$/;
resolve lowest org.slf4j:slf4j-api:[2.0.0,3.0.0) via central;
alias com.fasterxml.jackson.core:jackson-databind as jackson.version;
locked com.fasterxml.jackson.core:jackson-databind:2.21.1;
locked org.slf4j:slf4j-api:2.0.0;

Ranges in, versions out

Each resolve statement names a Maven version range and a bound (lowest, highest or snapshot). The resolver asks your repositories which versions exist and picks one.

A lock file that stays readable

Results are written back into the same script as resolved and locked records, with your comments intact, so a version bump is a one-line diff.

Share a bill of materials

import another project’s published script to inherit its locked versions, and use allow unlocked to say which of them you may move forward yourself.

Deprecate and blacklist

Mark version ranges as deprecated or blacklisted so downstream builds can warn or fail when they pick them up.

Docker images too

resolve docker almalinux:8-minimal; pins a tag to its immutable sha256 digest.

Strict by default

A script with a syntax error is rejected with the file, line and column, never silently half-parsed.