A representation of a version string for an implementation of the Java SE Platform. A version string contains a version number optionally followed by pre-release and build information.
A version number , $VNUM
, is a non-empty sequence of elements separated by period characters (U+002E). An element is either zero, or a unsigned integer numeral without leading zeros. The final element in a version number must not be zero. The format is:
^[1-9][0-9]*(((\.0)*\.[1-9][0-9]*)*)*$
The sequence may be of arbitrary length but the first three elements are assigned specific meanings, as follows:
$MAJOR.$MINOR.$SECURITY
-
$MAJOR
--- The major version number, incremented for a major release that contains significant new features as specified in a new edition of the Java SE Platform Specification, e.g., JSR 337 for Java SE 8. Features may be removed in a major release, given advance notice at least one major release ahead of time, and incompatible changes may be made when justified. The $MAJOR
version number of JDK 8 is 8
; the $MAJOR
version number of JDK 9 is 9
. When $MAJOR
is incremented, all subsequent elements are removed.
-
$MINOR
--- The minor version number, incremented for a minor update release that may contain compatible bug fixes, revisions to standard APIs mandated by a Maintenance Release of the relevant Platform Specification, and implementation features outside the scope of that Specification such as new JDK-specific APIs, additional service providers, new garbage collectors, and ports to new hardware architectures.
-
$SECURITY
--- The security level, incremented for a security update release that contains critical fixes including those necessary to improve security. $SECURITY
is not reset when $MINOR
is incremented. A higher value of $SECURITY
for a given $MAJOR
value, therefore, always indicates a more secure release, regardless of the value of $MINOR
.
The fourth and later elements of a version number are free for use by downstream consumers of this code base. Such a consumer may, e.g., use the fourth element to identify patch releases which contain a small number of critical non-security fixes in addition to the security fixes in the corresponding security release.
The version number does not include trailing zero elements; i.e., $SECURITY
is omitted if it has the value zero, and $MINOR
is omitted if both $MINOR
and $SECURITY
have the value zero.
The sequence of numerals in a version number is compared to another such sequence in numerical, pointwise fashion; e.g., 9.9.1
is less than 9.10.3
. If one sequence is shorter than another then the missing elements of the shorter sequence are considered to be less than the corresponding elements of the longer sequence; e.g., 9.1.2
is less than 9.1.2.1
.
A version string , $VSTR
, consists of a version number $VNUM
, as described above, optionally followed by pre-release and build information, in the format
$VNUM(-$PRE)?(\+($BUILD)?(-$OPT)?)?
where:
-
$PRE
, matching ([a-zA-Z0-9]+)
--- A pre-release identifier. Typically ea
, for a potentially unstable early-access release under active development, or internal
, for an internal developer build.
-
$BUILD
, matching (0|[1-9][0-9]*)
--- The build number, incremented for each promoted build. $BUILD
is reset to 1
when any portion of $VNUM
is incremented.
-
$OPT
, matching ([-a-zA-Z0-9\.]+)
--- Additional build information, if desired. In the case of an internal
build this will often contain the date and time of the build.
A version number 10-ea
matches $VNUM = "10"
and $PRE = "ea"
. The version number 10+-ea
matches $VNUM = "10"
and $OPT = "ea"
.
When comparing two version strings, the value of $OPT
, if present, may or may not be significant depending on the chosen comparison method. The comparison methods compareTo()
and compareToIgnoreOptional()
should be used consistently with the corresponding methods equals()
and equalsIgnoreOptional()
.
A short version string , $SVSTR
, often useful in less formal contexts, is a version number optionally followed by a pre-release identifier:
$VNUM(-$PRE)?