dependency-maven

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

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.

Dependency Scope

Phạm vi phụ thuộc được sử dụng để giới hạn độ nhạy của một phụ thuộc và xác định khi nào một phụ thuộc được đưa vào một đường dẫn phân nhánh.

Có 6 phạm vi:

  • compile: Đây là phạm vi mặc định, được sử dụng nếu không có phạm vi nào được chỉ định. Biên dịch phụ thuộc có sẵn trong tất cả các classpath của một dự án. Hơn nữa, những phụ thuộc đó được truyền sang các dự án phụ thuộc.
  • provided: Điều này giống như biên dịch, nhưng chỉ ra rằng bạn mong đợi JDK hoặc một vùng chứa cung cấp sự phụ thuộc trong thời gian chạy. Ví dụ: khi xây dựng một ứng dụng web cho Java Enterprise Edition, bạn sẽ đặt sự phụ thuộc vào API Servlet và các API Java EE có liên quan thành phạm vi được cung cấp vì vùng chứa web cung cấp các lớp đó. Một phụ thuộc với phạm vi này được thêm vào classpath được sử dụng để biên dịch và kiểm tra, nhưng không phải là classpath thời gian chạy. Nó không có tính bắc cầu.
  • runtime: Phạm vi này chỉ ra rằng phụ thuộc không cần thiết để biên dịch, nhưng là để thực thi. Maven bao gồm một phụ thuộc với phạm vi này trong thời gian chạy và đường dẫn thử nghiệm, nhưng không bao gồm classpath biên dịch.
  • test: Phạm vi này chỉ ra rằng phụ thuộc không cần thiết để sử dụng ứng dụng bình thường và chỉ có sẵn cho các giai đoạn biên dịch và thực thi thử nghiệm. Phạm vi này không có tính bắc cầu. Thông thường, phạm vi này được sử dụng cho các thư viện thử nghiệm như JUnit và Mockito. Nó cũng được sử dụng cho các thư viện không thử nghiệm như Apache Commons IO nếu các thư viện đó được sử dụng trong các thử nghiệm đơn vị (src / test / java) nhưng không có trong mã mô hình (src / main / java).
  • system: Phạm vi này tương tự như được cung cấp ngoại trừ việc bạn phải cung cấp JAR chứa nó một cách rõ ràng. Hiện vật luôn có sẵn và không được tra cứu trong kho lưu trữ.
  • import: Phạm vi này chỉ được hỗ trợ trên phụ thuộc của loại pom trong phần . Nó chỉ ra rằng sự phụ thuộc sẽ được thay thế bằng danh sách hiệu quả của các phụ thuộc trong phần của POM được chỉ định. Vì chúng được thay thế, các phụ thuộc có phạm vi nhập không thực sự tham gia vào việc hạn chế tính chuyển đổi của một phụ thuộc.

Mỗi phạm vi (ngoại trừ nhập) ảnh hưởng đến các phụ thuộc bắc cầu theo những cách khác nhau, như được minh họa trong bảng dưới đây. Nếu một phụ thuộc được đặt thành phạm vi trong cột bên trái, phụ thuộc bắc cầu của phụ thuộc đó với phạm vi trên hàng trên cùng dẫn đến phụ thuộc trong dự án chính với phạm vi được liệt kê tại giao điểm. Nếu không có phạm vi nào được liệt kê, điều đó có nghĩa là phần phụ thuộc bị bỏ qua.

compileprovidedruntimetest
compilecompile(*)runtime
providedprovidedprovided
runtimeruntimeruntime
testtesttest

(*) Lưu ý: thay vào đó, mục đích là đây phải là phạm vi thời gian chạy, vì vậy tất cả các phụ thuộc biên dịch phải được liệt kê rõ ràng. Tuy nhiên, nếu một thư viện mà bạn phụ thuộc mở rộng một lớp từ một thư viện khác, thì cả hai đều phải có sẵn tại thời điểm biên dịch. Vì lý do này, các phụ thuộc thời gian biên dịch vẫn là phạm vi biên dịch ngay cả khi chúng có tính bắc cầu.

Trong bài sau, mình sẽ viết về Quản lý dependency trong Maven. Chúc bạn học tốt.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai.

Tài liệu + Khóa học lập trình FREE
Tài liệu + Khóa học lập trình FREE

DMCA.com Protection Status