<Phạm vi> dưới <phụ thuộc> trong pom.xml để làm gì?


179

Nhìn vào tài liệu http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html , chúng ta có thể thấy <scope>thẻ bên dưới<dependency>

Đó là gì và làm thế nào chúng ta có thể sử dụng nó để chạy thử nghiệm?


15
tất cả đều được giải thích rất rõ trong các tài liệu: maven.apache.org/guides/int sinhtion / Giả
guido

Câu trả lời:


266

Phần <scope>tử có thể lấy 6 giá trị: biên dịch , cung cấp , thời gian chạy , kiểm tra , hệ thốngnhập .

Phạm vi này được sử dụng để hạn chế tính xuyên suốt của một phụ thuộc và cũng ảnh hưởng đến đường dẫn lớp được sử dụng cho các tác vụ xây dựng khác nhau.

biên dịch

Đây là phạm vi mặc định, được sử dụng nếu không được chỉ định. Biên dịch phụ thuộc có sẵn trong tất cả các đường dẫn của dự án. Hơn nữa, những phụ thuộc đó được tuyên truyền cho các dự án phụ thuộc.

cung cấp

Đ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 thùng chứa cung cấp sự phụ thuộc khi chạy. Ví dụ: khi xây dựng một ứng dụng web cho Phiên bản Java Enterprise, bạn sẽ đặt sự phụ thuộc vào API Servlet và API Java EE có liên quan đến phạm vi được cung cấp vì bộ chứa web cung cấp các lớp đó. Phạm vi này chỉ có sẵn trên đường biên dịch và biên dịch thử nghiệm, và không có tính bắc cầu.

thời gian chạy

Phạm vi này chỉ ra rằng sự phụ thuộc là không cần thiết để biên dịch, nhưng là để thực thi. Đó là trong thời gian chạy và kiểm tra các đường dẫn lớp, nhưng không phải là đường dẫn biên dịch.

kiểm tra

Phạm vi này chỉ ra rằng sự phụ thuộc là không bắt buộc đối với việc sử dụng ứng dụng thông thường và chỉ khả dụng cho các giai đoạn biên dịch và thực hiện thử nghiệm.

hệ thống

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 có chứa nó một cách rõ ràng. Cổ vật này luôn có sẵn và không được tra cứu trong kho lưu trữ.

nhập (chỉ khả dụng trong Maven 2.0.9 trở lên)

Phạm vi này chỉ được sử dụng trên một phụ thuộc của loại pom trong phần. Nó chỉ ra rằng POM được chỉ định nên được thay thế bằng các phụ thuộc trong phần của POM đó. Vì chúng được thay thế, các phụ thuộc có phạm vi nhập khẩu không thực sự tham gia vào việc giới hạn tính chuyển đổi của một phụ thuộc.

Để trả lời phần thứ hai của câu hỏi của bạn:

Làm thế nào chúng ta có thể sử dụng nó để chạy thử nghiệm?

Lưu ý rằng testphạm vi cho phép chỉ sử dụng các phụ thuộc cho giai đoạn thử nghiệm.

Đọc tài liệu để biết chi tiết đầy đủ.


Vì vậy, nếu bạn sử dụng "test" thì nó có kết thúc trong .jar được tạo không?
markthegrea

1
Điều gì nếu một phụ thuộc là cần thiết tại biên dịch và thời gian chạy?
Albin


12

Sáu phạm vi phụ thuộc:

  • biên dịch : phạm vi mặc định, classpath có sẵn cho cả hai src/mainsrc/test
  • kiểm tra : classpath có sẵn chosrc/test
  • được cung cấp : như tuân thủ nhưng được cung cấp bởi JDK hoặc một container trong thời gian chạy
  • thời gian chạy : không yêu cầu biên dịch chỉ yêu cầu trong thời gian chạy
  • hệ thống : được cung cấp tại địa phương cung cấp classpath
  • nhập : chỉ có thể nhập các POM khác vào <dependencyManagement/>, chỉ khả dụng trong Maven 2.0.9 trở lên


4

Thẻ phạm vi luôn được sử dụng để giới hạn các phụ thuộc bắc cầu và tính khả dụng của tệp jar ở cấp đường dẫn lớp. Nếu chúng tôi không cung cấp bất kỳ phạm vi nào thì phạm vi mặc định sẽ hoạt động tức là Biên dịch .


11
Biên dịch nghĩa là bạn cần JAR để biên dịch và chạy ứng dụng. Đối với một ứng dụng web, ví dụ, JAR sẽ được đặt trong thư mục WEB-INF / lib. Được cung cấp có nghĩa là bạn cần JAR để biên dịch, nhưng trong thời gian chạy đã có JAR được cung cấp bởi môi trường nên bạn không cần nó được đóng gói với ứng dụng của bạn. Đối với một ứng dụng web, điều này có nghĩa là tệp JAR sẽ không được đặt vào thư mục WEB-INF / lib. Đối với ứng dụng web, nếu máy chủ ứng dụng đã cung cấp JAR (hoặc chức năng của nó), thì hãy sử dụng "được cung cấp" nếu không sử dụng "biên dịch".
Mukesh

1
vui lòng thêm nhận xét của bạn bên trong câu trả lời của bạn
Supun Wijerathne

0

Nếu chúng tôi không cung cấp bất kỳ phạm vi nào thì phạm vi mặc định sẽ được biên dịch, Nếu bạn muốn xác nhận, chỉ cần chuyển đến tab pom hiệu quả trong trình chỉnh sửa nhật thực, nó sẽ hiển thị cho bạn dưới dạng biên dịch.


OP hỏi phạm vi là gìkhông làm gì , không tìm thấy phạm vi mặc định là gì.
Wouter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.