Dependency Resolution & Locking
Purpose
The dependency resolution and locking stage determines which dependencies are required for the project, resolves version constraints for package dependencies, builds a complete dependency tree, detects circular dependencies, and ensures reproducible builds through lock files.
When It Executes
This stage executes after Initialization & Configuration and is typically triggered by:
- The
install_depsprovider (dependency ofcompile) - The
lockprovider (explicitly locking dependencies) - Any command that requires dependencies to be resolved
The compile provider depends on the lock provider, which depends on install_deps.
Prerequisites
- State initialized with configuration loaded
rebar.configparsed with dependencies listrebar.lockread (if exists) with locked versions- Application discovery completed (for project apps)
Outputs
- Complete list of all dependencies (direct and transitive)
- Dependency tree with levels (depth from project root)
- Resolved versions for all package dependencies
- Updated
rebar.lockfile with locked versions - Topologically sorted dependency list (compilation order)
- Updated state with:
all_deps: All resolved dependenciesdeps_to_build: Dependencies that need compilationlock: Current lock data