2017-11-07 29 views
19

Theo this blog trên sơ đồ chuỗi phiên bản mới của Java 9, phiên bản được cho là giống như MAJOR.MINOR.SECURITY, tức là, có nghĩa vụ phải có 3 số và 2 dấu chấm ở giữa.Số thứ 4 có nghĩa là gì trong lược đồ chuỗi phiên bản Java 9?

Tuy nhiên, với Zulu 9 Azul, khi tôi in các phiên bản Java, nó đã 4 số và 3 giai đoạn:

./jdk/bin/java -version 
openjdk version "9.0.0.15" 
OpenJDK Runtime Environment (Zulu build 9.0.0.15+181) 
OpenJDK 64-Bit Server VM (Zulu build 9.0.0.15+181, mixed mode) 

làm 4 số đại diện là gì?

+0

Lưu ý rằng điều này có thể thay đổi một lần nữa trong tương lai. Có lẽ không phải là khuôn mẫu mà là ngữ nghĩa. http://mail.openjdk.java.net/pipermail/discuss/2017-September/004333.html – the8472

Trả lời

20

Bài đăng trên blog đó đã lỗi thời. Lược đồ thực hiện được thực hiện trong Java 9 được ghi lại trong JEP 223: New Version-String Scheme

Ý nghĩa của ba số đầu tiên được chuẩn hóa. Ý nghĩa của số thứ 4 và (bất kỳ) tiếp theo được để lại cho nhà cung cấp để xác định.

Cũng lưu ý mối quan hệ thú vị giữa các số thứ 2 và thứ 3.

Dưới đây là các phần liên quan của JEP.

"Trình tự có thể có độ dài tùy ý nhưng ba yếu tố đầu tiên được giao ý nghĩa cụ thể, như sau:

$MAJOR.$MINOR.$SECURITY 

$MAJOR - Số phiên bản lớn, đã tăng lên cho phát hành chính thức có chứa ý nghĩa mới các tính năng như được chỉ định trong phiên bản mới của Đặc tả nền tảng Java SE, ví dụ: JSR 337 cho Java SE 8. Các tính năng có thể bị xóa trong bản phát hành chính, trước ít nhất một bản phát hành chính trước đó và các thay đổi không tương thích có thể được thực hiện khi hợp lý.Số phiên bản $MAJOR của JDK 8 là 8; số phiên bản $MAJOR của JDK 9 là 9. Khi tăng $MAJOR, tất cả các phần tử tiếp theo sẽ bị xóa.

$MINOR - Số phiên bản nhỏ, tăng lên cho một phiên bản cập nhật nhỏ mà có thể chứa các bản sửa lỗi tương thích lỗi, sửa đổi API tiêu chuẩn bắt buộc của phát hành bảo dưỡng của Nền tảng kỹ thuật có liên quan, và các tính năng thực hiện ngoài phạm vi của kỹ thuật đó như API JDK cụ thể mới, các nhà cung cấp dịch vụ bổ sung, bộ thu gom rác mới và các cổng cho kiến ​​trúc phần cứng mới.

$SECURITY - Cấp độ bảo mật, được tăng lên cho bản phát hành cập nhật bảo mật có chứa các bản sửa lỗi quan trọng bao gồm các bản sửa lỗi cần thiết để cải thiện bảo mật. $SECURITY không được đặt lại về 0 khi $MINOR được tăng lên. Giá trị cao hơn là $SECURITY cho giá trị $MAJOR nhất định, do đó, luôn cho biết bản phát hành an toàn hơn, bất kể giá trị của $MINOR.

Yếu tố thứ tư và sau này của số phiên bản là miễn phí để người dùng hạ lưu sử dụng cơ sở mã JDK. Ví dụ, người tiêu dùng như vậy có thể sử dụng phần tử thứ tư để xác định các bản phát hành bản vá có chứa một số lượng nhỏ các bản sửa lỗi không bảo mật quan trọng ngoài các bản sửa lỗi bảo mật trong bản phát hành bảo mật tương ứng.

+0

@JAB Họ làm, chứ không phải thư. Phiên bản ngữ nghĩa cho phép các tiện ích mở rộng sau 3 nhãn đầu tiên 'Nhãn bổ sung cho bản phát hành trước và phát hành siêu dữ liệu có sẵn dưới dạng tiện ích mở rộng cho định dạng MAJOR.MINOR.PATCH.'. Đây chính là nó. – Ordous

+0

Kiến trúc sư trưởng của họ chỉ đề xuất rằng số phiên bản Java [thay đổi thành ngày phát hành] (https://jaxenter.com/java-9-version-numbering-scheme-137544.html), vì vậy chúng tôi sẽ kết thúc với một cái gì đó mà _looks_ giống như phiên bản ngữ nghĩa, nhưng thực sự chỉ là số gia tăng thực sự thực sự nhanh chóng sao cho nó trông "nâng cao" và "tiến bộ" và sự ác cảm tiếp thị khác. –

+5

@Ordous [Semver part 7] (http://semver.org/#spec-item-7): "[...] Phiên bản vá PHẢI được đặt lại về 0 khi phiên bản nhỏ được tăng lên." JEP rõ ràng không ** không ** đặt lại số '$ SECURITY' khi tăng số' $ MINOR'. – 8bittree

9

tức là, có nghĩa vụ phải có 3 số và 2 dấu chấm ở giữa.

Không nhất thiết và bạn có thể xác thực phiên bản bằng chính JDK như được mô tả chi tiết bên dưới.

Ngoài các JEP mà đúng như được liên kết bởi @Stephen trong other answer, đã có một sự bổ sung API để JDK cũng cho Runtime.Version mà có thể được sử dụng để xác nhận một chuỗi phiên bản nhất định. Điều này có thể được thực hiện bằng một cuống mẫu như:

[! Tôi tự hỏi sử dụng JShell có thể là thú vị ở đây, không có IDE]

Runtime.Version version = Runtime.Version.parse("9"); 
version = Runtime.Version.parse("9.0.1"); 
version = Runtime.Version.parse("9.0.0.15"); 
version = Runtime.Version.parse("9.0.0.15+181"); 

Mã này làm cho việc sử dụng Version.parse rằng

Phân tích chuỗi đã cho dưới dạng chuỗi phiên bản hợp lệ chứa phiên bản số theo sau là bản phát hành trước và xây dựng thông tin.

và có thể được tiếp tục sử dụng (chủ yếu) để nhận thông tin như số lớn, nhỏ, tiền phát hành và số bảo mật của (runtime) version.

Các vấn đề liên quan