dependency-maven

Giới thiệu về Cơ chế dependency trong Maven (phần 1)

Quản lý sự phụ thuộc là một tính năng cốt lõi của Maven. Dễ dàng quản lý các phần phụ thuộc cho một dự án. Có thể quản lý các phần phụ thuộc cho các dự án nhiều mô-đun và các ứng dụng bao gồm hàng trăm mô-đun. Maven giúp rất nhiều trong việc xác định, tạo và duy trì các bản dựng có thể tái tạo với các đường dẫn và phiên bản thư viện được xác định rõ ràng.

Phụ thuộc bắc cầu

Maven tránh sự cần thiết phải khám phá và chỉ định các thư viện mà các phần phụ thuộc của riêng bạn yêu cầu bằng cách tự động bao gồm các phần phụ thuộc bắc cầu.

Tính năng này được hỗ trợ bằng cách đọc các tệp dự án của các phần phụ thuộc của bạn từ các kho lưu trữ từ xa được chỉ định. Nói chung, tất cả các phụ thuộc của các dự án đó đều được sử dụng trong dự án của bạn, cũng như bất kỳ phụ thuộc nào mà dự án kế thừa từ cha mẹ của nó, hoặc từ các phụ thuộc của nó, v.v.

Không có giới hạn về số lượng cấp độ mà các phụ thuộc có thể được thu thập từ đó. Vấn đề chỉ nảy sinh khi phát hiện ra sự phụ thuộc theo chu kỳ.

Với sự phụ thuộc bắc cầu, biểu đồ của các thư viện được bao gồm có thể nhanh chóng phát triển khá lớn. Vì lý do này, có các tính năng bổ sung giới hạn những phụ thuộc nào được bao gồm:

  • Dàn xếp phụ thuộc – điều này xác định phiên bản của cấu phần phần mềm sẽ được chọn khi nhiều phiên bản được xem là phụ thuộc. Maven chọn “nearest definition”. Có nghĩa là, nó sử dụng phiên bản của phụ thuộc gần nhất với dự án của bạn trong cây phụ thuộc. Bạn luôn có thể đảm bảo một phiên bản bằng cách khai báo nó một cách rõ ràng trong POM của dự án của bạn. Lưu ý rằng nếu hai phiên bản phụ thuộc có cùng độ sâu trong cây phụ thuộc, thì khai báo đầu tiên sẽ thắng.
  • “nearest definition” có nghĩa là phiên bản được sử dụng sẽ là phiên bản gần nhất với dự án của bạn trong cây phụ thuộc. Hãy xem xét cây phụ thuộc này:
A ├── B │ └── C │ └── D 2.0 └── E └── D 1.0
Code language: CSS (css)

Trong văn bản, các phụ thuộc cho A, B và C được định nghĩa là A -> B -> C -> D 2.0 và A -> E -> D 1.0, sau đó D 1.0 sẽ được sử dụng khi xây dựng A vì đường dẫn từ A đến D đến E ngắn hơn. Bạn có thể thêm một cách rõ ràng phụ thuộc vào D 2.0 trong A để buộc sử dụng D 2.0, như được hiển thị ở đây:

A ├── B │ └── C │ └── D 2.0 ├── E │ └── D 1.0 │ └── D 2.0
Code language: CSS (css)
  • Quản lý phụ thuộc – điều này cho phép các tác giả dự án chỉ định trực tiếp các phiên bản của tạo tác sẽ được sử dụng khi chúng gặp phải trong các phụ thuộc bắc cầu hoặc trong các phụ thuộc mà không có phiên bản nào được chỉ định. Trong ví dụ ở phần trước, một phụ thuộc đã được thêm trực tiếp vào A mặc dù nó không được A. trực tiếp sử dụng. Thay vào đó, A có thể bao gồm D làm phụ thuộc trong phần Quản lý phụ thuộc của nó và kiểm soát trực tiếp phiên bản D được sử dụng khi nào, hoặc nếu. , nó đã từng được tham chiếu.
  • Phạm vi phụ thuộc – điều này cho phép bạn chỉ bao gồm các phụ thuộc phù hợp với giai đoạn hiện tại của bản dựng. Điều này được mô tả chi tiết hơn bên dưới.
  • Các phần phụ thuộc bị loại trừ – Nếu dự án X phụ thuộc vào dự án Y và dự án Y phụ thuộc vào dự án Z, thì chủ sở hữu của dự án X có thể loại trừ rõ ràng dự án Z như một phần phụ thuộc, bằng cách sử dụng phần tử “loại trừ”.
  • Phần phụ thuộc tùy chọn – Nếu dự án Y phụ thuộc vào dự án Z, thì chủ sở hữu của dự án Y có thể đánh dấu dự án Z là phụ thuộc tùy chọn, sử dụng phần tử “tùy chọn”. Khi dự án X phụ thuộc vào dự án Y, X sẽ chỉ phụ thuộc vào Y chứ không phụ thuộc vào Z tùy chọn của Y. Chủ sở hữu dự án X sau đó có thể thêm một cách rõ ràng phụ thuộc vào Z, tùy theo lựa chọn của mình. (Có thể hữu ích khi nghĩ về các phụ thuộc tùy chọn là “bị loại trừ theo mặc định.”)

Mặc dù các phụ thuộc bắc cầu có thể ngầm bao gồm các phụ thuộc mong muốn, nhưng bạn nên chỉ định trực tiếp các phụ thuộc một cách rõ ràng mà mã nguồn của bạn sử dụng trực tiếp. Thực tiễn tốt nhất này chứng minh giá trị của nó đặc biệt là khi các phụ thuộc trong dự án của bạn thay đổi các phụ thuộc của chúng.

Ví dụ: giả sử rằng dự án A của bạn chỉ định phụ thuộc vào dự án B khác và dự án B chỉ định phụ thuộc vào dự án C. Nếu bạn đang trực tiếp sử dụng các thành phần trong dự án C và bạn không chỉ định dự án C trong dự án A của mình, thì có thể gây ra lỗi xây dựng khi dự án B đột ngột cập nhật / loại bỏ sự phụ thuộc của nó vào dự án C.

Một lý do khác để chỉ định trực tiếp các phụ thuộc là nó cung cấp tài liệu tốt hơn cho dự án của bạn: người ta có thể tìm hiểu thêm thông tin bằng cách chỉ đọc tệp POM trong dự án của bạn hoặc bằng cách thực hiện phụ thuộc mvn: tree.

Maven cũng cung cấp tính phụ thuộc: phân tích mục tiêu của plugin để phân tích các phụ thuộc: nó giúp làm cho phương pháp hay nhất này dễ đạt được hơn.

Trong bài viết tới, mình sẽ phân tích về phạm vi của Dependency, chúc bạn học tốt

Bài viết liên quan

Leave a Reply

Your email address will not be published.