In general we differ between two version formats, SNAPSHOT and Release. SNAPSHOT versions are not static and may differ from time to time, whereas Releases will never change.
The version number rules are adapted from
Maven Versions Plugin.
Release Version Format
MajorVersion . MinorVersion . IncrementalVersion
For example 1.0.0
SNAPSHOT Version Format
MajorVersion . MinorVersion . IncrementalVersion -SNAPSHOT
For example 1.0.0-SNAPSHOT
The qualifier "-SNAPSHOT" implies that this build is not final and will be changed in the future.
These versions are used between two releases to test new features before they will be released.
Also the maven repository differs for SNAPSHOTs. So it is not possible to build a release that contains SNAPSHOT dependencies.
Integration SNAPSHOT Version Format
MajorVersion . MinorVersion . IncrementalVersion -RC-INT-SNAPSHOT
For example 1.0.0-RC-INT-SNAPSHOT
The qualifier "RC-INT-SNAPSHOT" implies that this build is not final an integration build and will be changed in the future.
The keywords used (e.g. RC) are treated special by maven, so even by naming an artifact like this the versioning between artifacts works properly, e.g.
1.0.0-SNAPSHOT < 1.0.0-RC-INT-SNAPSHOT < 1.0.0
Major Version
Should be incremented if
We call that a "release".
Minor Version
Should be incremented if
- there are changes that are binary-incompatible with previous versions (the API has been changed in a non-backwards-compatible way)
- there is so many content that has been changed that it makes sense to create a "full stack" release
We call that an "itermediate release" (Zwischenrelease).
Incremental Version
Also called tiny version.
Should be incremented if
- there were only small changes that do not affect the usage or are backward compatible, for example bug fixes / small internal features.