Trước hết, Ivy is not Maven;)
Maven2 là một quản lý dự án phần mềm và hiểu biết công cụ, trong khi Ivy là chỉ một công cụ quản lý phụ thuộc.
Ivy phụ thuộc rất nhiều vào một khái niệm duy nhất có tên là cấu hình.
Trong ivy, cấu hình mô-đun là cách để sử dụng hoặc để xem mô-đun.
Ví dụ: bạn có thể có cấu hình thử nghiệm và thời gian chạy trong mô-đun của mình. Nhưng bạn cũng có thể có một mysql và một cấu hình oracle. Hoặc cấu hình hdbnate và jdbc.
Trong mỗi cấu hình bạn có thể tuyên bố:
- những gì hiện vật (jar, chiến tranh, ...) là bắt buộc.
- phụ thuộc của bạn vào các mô-đun khác và mô tả cấu hình của sự phụ thuộc bạn cần. Điều này được gọi là lập bản đồ cấu hình.
Vì vậy, thuộc tính conf thực hiện chính xác điều đó: Mô tả ánh xạ cấu hình cho phụ thuộc.
mapped child element là "bên phải của bạn của biểu tượng ->
" và đại diện cho tên của cấu hình phụ thuộc được ánh xạ. '*'
ký tự đại diện có thể được sử dụng để chỉ định tất cả các cấu hình của mô-đun này.
Maven2 trên mặt của nó có cái gì gọi là phạm vi.
Bạn có thể khai báo một phụ thuộc như là một phần của phạm vi kiểm tra hoặc phạm vi thời gian xây dựng.
Sau đó, tùy thuộc vào phạm vi này, bạn sẽ nhận được tạo phẩm phụ thuộc (chỉ một tạo phẩm cho mỗi mô-đun trong maven2) với các phụ thuộc của nó phụ thuộc vào phạm vi của chúng. Phạm vi được xác định trước trong maven2 và bạn không thể thay đổi điều đó.
Điều đó có nghĩa:
Có một nhiều phụ thuộc không cần thiết tải cho nhiều thư viện.
Ví dụ: Hibernate tải xuống một loạt các Joss JBoss và Thẻ Hiển thị tải xuống tất cả các JAR khuôn khổ web khác nhau. Tôi thấy mình không bao gồm gần như nhiều phụ thuộc như tôi đã thêm vào.
Vấn đề là ngủ đông có thể được sử dụng với một số triển khai bộ nhớ cache, thực hiện một số kết nối mạng ... Và điều này không thể được quản lý với phạm vi, nơi cấu hình Ivy cung cấp giải pháp thanh lịch cho loại sự cố này.
Ví dụ, trong ivy, giả ngủ đông có một tập tin ivy như một này, sau đó bạn có thể khai báo một sự phụ thuộc như thế:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->proxool,oscache"/>
để có được ngủ đông với proxool và OSCache hiện thực của nó, và như thế:
<dependency org="hibernate" name="hibernate" rev="2.1.8" conf="default->dbcp,swarmcache"/>
để được ngủ đông với dbcp và swarmcache.
Bằng cách lập bản đồ mặc định của bạn cấu hình master
để "proxool,oscache
" hoặc "dbcp,swarmcache
", bạn chỉ định những gì bạn cần chính xác từ các mô-đun "ngủ đông".
Bạn có thể tìm các đối số "proxool, ..." đó bằng cách liệt kê cấu hình ivy được xác định cho từng mô-đun liên kết với thư viện. Ví dụ:
<ivy-module version="2.0">
<info organisation="ssn-src" module="pc"/>
<configurations defaultconfmapping="default->default">
<conf name="default" />
<conf name="provided" description="they are provided by the env." />
<conf name="compile" extends="default,provided" />
<conf name="war" extends="default"/>
</configurations>
<dependencies>
Example:
giả sử modA
có hai cấu hình, mặc định và thử nghiệm.
Như một vấn đề thực tế, sẽ rất bất thường khi muốn loại bỏ thuộc tính conf
của phần tử phụ thuộc.
Các ivy.xml
cho modA
có thể có một sự phụ thuộc:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*" />
Bạn đang bắt đầu từ mặc định, chứ không phải từ cả hai mặc định và thử nghiệm.
Ví dụ trên làm cho mặc định của modA phụ thuộc vào conf1, conf2 và conf3 của modB.
Hoặc bạn có thể muốn nói rằng mặc định Moda của chỉ phụ thuộc vào conf1 modB của:
<dependency org="theteam" name="modB" rev="1.0" conf="default->*conf1*" />
Đã thêm một số chi tiết khác, theo yêu cầu – VonC