GHI CHÚ:
Câu trả lời này chỉ áp dụng cho Maven 2! Đề cập LATEST
và RELEASE
metaversions đã được giảm xuống trong Maven 3 "vì lợi ích của tái sản xuất xây dựng" , hơn 6 năm về trước. Vui lòng tham khảo giải pháp tuân thủ Maven 3 này .
Nếu bạn luôn muốn sử dụng phiên bản mới nhất, Maven có hai từ khóa bạn có thể sử dụng thay thế cho phạm vi phiên bản. Bạn nên cẩn thận sử dụng các tùy chọn này vì bạn không còn kiểm soát các plugin / phụ thuộc mà bạn đang sử dụng.
Khi bạn phụ thuộc vào plugin hoặc phụ thuộc, bạn có thể sử dụng giá trị phiên bản là MỚI NHẤT hoặc ĐÁNG TIN CẬY. LATEST đề cập đến phiên bản mới nhất được phát hành hoặc chụp nhanh của một vật phẩm cụ thể, vật phẩm được triển khai gần đây nhất trong một kho lưu trữ cụ thể. RELEASE đề cập đến bản phát hành không chụp nhanh cuối cùng trong kho lưu trữ. Nói chung, nó không phải là một cách thực hành tốt nhất để thiết kế phần mềm mà phụ thuộc vào một phiên bản không cụ thể của một vật phẩm. Nếu bạn đang phát triển phần mềm, bạn có thể muốn sử dụng RELEASE hoặc LATEST một cách thuận tiện để bạn không phải cập nhật số phiên bản khi bản phát hành mới của thư viện bên thứ ba được phát hành. Khi bạn phát hành phần mềm, bạn phải luôn đảm bảo rằng dự án của bạn phụ thuộc vào các phiên bản cụ thể để giảm cơ hội xây dựng hoặc dự án của bạn bị ảnh hưởng bởi bản phát hành phần mềm không thuộc quyền kiểm soát của bạn.
Xem phần Cú pháp POM của sách Maven để biết thêm chi tiết. Hoặc xem tài liệu này về Phạm vi Phiên bản phụ thuộc , trong đó:
- Dấu ngoặc vuông (
[
& ]
) có nghĩa là "đóng" (đã bao gồm).
- Dấu ngoặc đơn (
(
& )
) có nghĩa là "mở" (độc quyền).
Đây là một ví dụ minh họa các tùy chọn khác nhau. Trong kho lưu trữ Maven, com.foo:my-foo có siêu dữ liệu sau:
<?xml version="1.0" encoding="UTF-8"?><metadata>
<groupId>com.foo</groupId>
<artifactId>my-foo</artifactId>
<version>2.0.0</version>
<versioning>
<release>1.1.1</release>
<versions>
<version>1.0</version>
<version>1.0.1</version>
<version>1.1</version>
<version>1.1.1</version>
<version>2.0.0</version>
</versions>
<lastUpdated>20090722140000</lastUpdated>
</versioning>
</metadata>
Nếu cần phải phụ thuộc vào tạo phẩm đó, bạn có các tùy chọn sau (tất nhiên các phạm vi phiên bản khác có thể được chỉ định, chỉ hiển thị các tùy chọn có liên quan ở đây):
Khai báo một phiên bản chính xác (sẽ luôn phân giải thành 1.0.1):
<version>[1.0.1]</version>
Khai báo một phiên bản rõ ràng (sẽ luôn giải quyết thành 1.0.1 trừ khi xảy ra xung đột, khi Maven sẽ chọn phiên bản phù hợp):
<version>1.0.1</version>
Khai báo phạm vi phiên bản cho tất cả 1.x (hiện sẽ phân giải thành 1.1.1):
<version>[1.0.0,2.0.0)</version>
Khai báo phạm vi phiên bản kết thúc mở (sẽ phân giải thành 2.0.0):
<version>[1.0.0,)</version>
Khai báo phiên bản là MỚI NHẤT (sẽ phân giải thành 2.0.0) (đã bị xóa khỏi maven 3.x)
<version>LATEST</version>
Khai báo phiên bản dưới dạng ĐÁNG TIN CẬY (sẽ giải quyết 1.1.1) (đã bị xóa khỏi maven 3.x):
<version>RELEASE</version>
Lưu ý rằng theo mặc định, các triển khai của riêng bạn sẽ cập nhật mục nhập "mới nhất" trong siêu dữ liệu Maven, nhưng để cập nhật mục "phát hành", bạn cần kích hoạt "hồ sơ phát hành" từ siêu POM Maven . Bạn có thể làm điều này với "-Prelease-profile" hoặc "-DperformRelease = true"
Cần nhấn mạnh rằng mọi cách tiếp cận cho phép Maven chọn các phiên bản phụ thuộc (LATEST, RELEASE và phạm vi phiên bản) có thể khiến bạn mở để xây dựng các vấn đề về thời gian, vì các phiên bản sau có thể có hành vi khác nhau (ví dụ: plugin phụ thuộc trước đó đã chuyển sang mặc định giá trị từ đúng đến sai, với kết quả khó hiểu).
Do đó, nói chung là một ý tưởng tốt để xác định các phiên bản chính xác trong bản phát hành. Như câu trả lời của Tim chỉ ra, plugin maven-Phiên bản là một công cụ tiện dụng để cập nhật các phiên bản phụ thuộc, đặc biệt là các phiên bản: phiên bản sử dụng phiên bản mới nhất và phiên bản: mục tiêu phát hành mới nhất .