No snapshot dependencies
maven/no-snapshot-dependencies@v1
No dependency the POM and its modules declare, and no BOM they import, is at a -SNAPSHOT version.
| Id | maven/no-snapshot-dependencies |
| Version | v1 |
| Category | maven |
| Default severity | error |
| Interpreter | python3 |
| Timeout | 30 seconds |
| Violations tolerated | 0 |
| Collects | maven |
Collectors
This guardrail gathers nothing itself. It depends on the collectors below, which the CLI runs once per build before any check, and reads what they found out of GUARDRAIL_FACTS. A collector that collects nothing skips this guardrail rather than failing it.
| Collector | Gathers | Inputs it is given |
|---|---|---|
maven | The Maven build in the project directory: the root pom.xml coordinates, its modules, its properties and every dependency it and its modules declare, with the versions its imported BOMs supply. | projectDir |
The inputs above are this guardrail's own, passed straight through. Configuring one in buildnote.json changes what is collected, and two guardrails configured the same way share the one collection.
Configuration
{
"guardrails": {
"failOn": "error",
"comment": true,
"checks": [
{
"use": "maven/no-snapshot-dependencies@v1",
"severity": "error",
"with": {
"projectDir": "."
},
"exemptions": []
}
]
}
}Inputs
| Input | Description | Default | Environment variable |
|---|---|---|---|
projectDir | Directory holding the project, relative to the directory the CLI runs in. | . | GUARDRAIL_INPUT_PROJECTDIR |
How to fix
Depend on a released version, cutting a release of the library upstream where there is not one yet:
<dependency>
<groupId>com.acme</groupId>
<artifactId>queue</artifactId>
<version>1.4.0</version>
</dependency>A snapshot is republished under the same coordinates, so whatever 1.4.0-SNAPSHOT resolved to on the day the build shipped is gone and this commit cannot be built into the artifact that was released from it. One that mvn install put in a local repository is worse again: it exists on one machine and nowhere a rebuild can reach.
More in maven
maven/coordinates-declared. The root POM names the group, the artifact and the version it publishes, declaring them itself or inheriting the group and the version from a<parent>.maven/dependencies-versioned. Every dependency the POM and its modules declare takes a version from the checkout, whether from the entry itself, from<dependencyManagement>, from an imported BOM or from a property. A parent POM published elsewhere is not read here, so a version only that parent manages reads as unresolved.maven/pom-parses. The rootpom.xmlis well formed XML, so the build it describes can be read at all.