Không chính xác.
JEP 247: Biên dịch cho phiên bản nền tảng cũ hơn định nghĩa tùy chọn dòng lệnh mới này,--release
:
Chúng tôi đã xác định một tùy chọn dòng lệnh mới, tùy chọn --release
này tự động cấu hình trình biên dịch để tạo ra các tệp lớp sẽ liên kết với việc triển khai phiên bản nền tảng nhất định. Đối với các nền tảng được xác định trước javac
, --release N
tương đương với-source N -target N -bootclasspath <bootclasspath-from-N>
. (nhấn mạnh của tôi)
Vì vậy, không, nó không tương đương với -source N -target N
. Lý do cho sự bổ sung này được nêu trong phần "Động lực":
javac
cung cấp hai tùy chọn dòng lệnh -source
và -target
có thể được sử dụng để chọn phiên bản của ngôn ngữ Java được trình biên dịch chấp nhận và phiên bản của các tệp lớp mà nó tạo ra tương ứng. Tuy nhiên, theo mặc định, javac
biên dịch dựa trên phiên bản mới nhất của các API nền tảng. Do đó, chương trình đã biên dịch có thể vô tình sử dụng các API chỉ có sẵn trong phiên bản hiện tại của nền tảng. Các chương trình như vậy không thể chạy trên các phiên bản cũ hơn của nền tảng, bất kể các giá trị được chuyển đến -source
và -target
. các tùy chọn. Đây là điểm khó khăn về khả năng sử dụng lâu dài, vì người dùng mong đợi rằng bằng cách sử dụng các tùy chọn này, họ sẽ nhận được các tệp lớp có thể chạy trên phiên bản nền tảng được chỉ định.
Tóm lại, việc chỉ định các tùy chọn nguồn và đích là không đủ để biên dịch chéo. Bởi vì javac
, theo mặc định, biên dịch dựa trên API nền tảng mới nhất, nên chúng không thể được đảm bảo chạy trên các phiên bản cũ hơn. Bạn cũng cần chỉ định -bootclasspath
tùy chọn tương ứng với phiên bản cũ hơn để biên dịch chéo một cách chính xác. Điều này sẽ bao gồm phiên bản API chính xác để biên dịch và cho phép thực thi trên phiên bản cũ hơn. Vì nó rất hay bị quên, nên người ta quyết định thêm một tùy chọn dòng lệnh thực hiện tất cả những điều cần thiết để biên dịch chéo một cách chính xác.
Đọc thêm trong danh sách gửi thư và Tài liệu Oracle . Lỗi ban đầu đã được nộp ở đây . Lưu ý rằng kể từ khi tích hợp tùy chọn này, các bản dựng JDK đã đi kèm với mô tả về các API nền tảng của các bản phát hành cũ hơn, được đề cập trong phần "Rủi ro và giả định". Điều đó có nghĩa là bạn không cần cài đặt phiên bản cũ hơn trên máy của mình để quá trình biên dịch chéo hoạt động.