Từ Java 9, versioning tuân thủ semantic versioning. Version number = chuỗi non-empty phân tách bởi dấu chấm. 3 phần chính: major, minor, security. Định nghĩa trong Runtime.Version class.
Định dạng version
$MAJOR.$MINOR.$SECURITY(.$otherpart)?
Ý nghĩa từng phần
| Phần | Tên | Khi nào tăng | Ví dụ JDK 9 |
|---|---|---|---|
$MAJOR | Major version | Release lớn, thay đổi platform spec | 9 |
$MINOR | Minor version | Bug fixes, enhancements standard API | 0 |
$SECURITY | Security level | Critical security fixes. Không reset về 0 khi minor tăng | 4 |
$otherpart | Patch version | JVM provider dùng cho non-security patches nhỏ | - |
Version string đầy đủ
$VNUM(-$PRE)?+$BUILD(-$OPT)? $VNUM-$PRE(-$OPT)? $VNUM(+-$OPT)?
$PRE: pre-release identifier (ea, beta...).$BUILD: build number.$OPT: optional info (timestamp...).
Ví dụ truy cập version info
public class VersionSchemeTest {
public static void main(String args[]) {
System.out.println(Runtime.version().toString()); // String representation
System.out.println(Runtime.version().major()); // major version number
System.out.println(Runtime.version().minor()); // minor version number
System.out.println(Runtime.version().security()); // security version number
}
}
Kết quả (JDK 9.0.4+11)
9.0.4+11 9 0 4
So sánh versioning cũ vs mới
| Đặc điểm | Pre-Java 9 (1.8.0_XXX) | Java 9+ (9.0.4) |
|---|---|---|
| Format | 1.major.minor_update | major.minor.security(+build) |
| Major | Luôn là 1 | Thực sự (9, 10, 11, 17, 21...) |
| Minor | Update number | Feature/minor release |
| Security | Không tách biệt | Security level riêng |
| Time-based release | Không | Có (6 tháng/lần từ JDK 10) |
Versioning mới rõ ràng, dự đoán được, phù hợp release cadence 6 tháng của Oracle/OpenJDK.