2009-03-16 29 views
60

tôi không thể tìm thấy bất kỳ lời giải thích thấu đáo về conf thuộc tính Ivy phụ thuộc tag của:Ai đó có thể giải thích thuộc tính conf phụ thuộc của ivy.xml không?

<dependency org="hibernate" name="hibernate" rev="3.1.3" conf="runtime, standalone -> runtime(*)"/> 

Thấy rằng conf thuộc tính? Tôi không thể tìm thấy bất kỳ lời giải thích nào (mà tôi có thể hiểu) về phía bên tay phải của biểu tượng ->. Xin hãy nhớ rằng tôi không biết điều đầu tiên về Maven vì vậy hãy giải thích thuộc tính này với sự cân nhắc đó.

Vâng, tôi đã nhìn này: http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

Cảm ơn,
Dan

+0

Đã thêm một số chi tiết khác, theo yêu cầu – VonC

Trả lời

69

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*" /> 
+5

Ok, tôi nghĩ rằng tôi gần như có được nó. Nhưng bạn tìm thấy lựa chọn của mình ở đâu? Làm thế nào bạn biết bạn có thể nói proxool, oscache/dbcp, swarmcache? –

+1

Đó là "phụ thuộc không cần thiết tải xuống" IS địa chỉ trong Maven, thông qua loại trừ phụ thuộc mặc định transitive và làm cho sự lựa chọn của bạn rõ ràng. Nhưng tôi sẽ là người đầu tiên thừa nhận rằng nó không có nghĩa là "tao nhã". – mezmo

+2

+1 cho phản ứng rất rõ ràng; xem thêm http://ant.apache.org/ivy/history/latest-milestone/tutorial/conf.html –

13

Cảm ơn VonC!

Nó đã giúp tôi nhiều hơn nữa.

Khi nói đến tùy chọn (cấu hình) tieTYT, bạn có thể tìm thấy chúng trong ivy- [số sửa đổi] .xml tệp trong kho lưu trữ Ivy của bạn theo: tên tổ chức -> tên mô-đun.

Phần tử cấu hình ví dụ từ bản sửa đổi JUnit 4.6 được tải xuống từ http://www.springsource.com/repository/app/.

<configurations> 
    <conf name="compile" visibility="public" description="Compile dependencies"/> 
    <conf name="optional" visibility="public" extends="compile" description="Optional dependencies"/> 
    <conf name="provided" visibility="public" description="Provided dependencies"/> 
    <conf name="runtime" visibility="public" extends="compile" description="Runtime dependencies"/> 
</configurations> 

Trong tệp ivy.xml của dự án, tôi có một thử nghiệm biên dịch cấu hình.Trong phần tử phụ thuộc, tôi có sự phụ thuộc sau:

<dependency org="org.junit" name="com.springsource.org.junit" 
     rev="4.6.0" conf="compile-test->compile" /> 

Như bạn có thể thấy, cấu hình thử nghiệm biên dịch của tôi phụ thuộc vào cấu hình biên dịch trong tệp ivy.xml của JUnit.

+1

Hoàn toàn bỏ lỡ câu trả lời của bạn ở đó. Minh họa tốt. +1 – VonC

7

Nó đã giúp tôi một lần để hiểu sự vật theo cách này:

  1. Một cấu hình ivy chỉ đơn giản là một tên cho một số tập hợp con của các đồ tạo tác của module.
  2. Sự phụ thuộc giữa các mô-đun được xác định theo các tên cấu hình.
10

Tôi đã đọc những câu trả lời này và khá thẳng thắn tôi không thấy chúng hữu ích. Tôi nghĩ rằng họ có thể được cải thiện vì vậy tôi đã viết xuống cách tôi sử dụng và hiểu được cấu hình bằng cách hiển thị một ví dụ thực tế:

http://wrongnotes.blogspot.com/2014/02/simplest-explanation-of-ivy.html

Thật không may, bạn phải hiểu một chút về maven và phụ thuộc của nó vì Ivy đang sử dụng kho Maven để kéo những tập tin jar đó xuống để Ivy phải hiểu Maven và nó chuyển nó cho bạn. Nhưng, tôi nghĩ rằng tôi giữ nó thật đơn giản mà không đi vào chi tiết quá nhiều về con quạ.

+0

bài viết rất hữu ích, có thể là tốt đẹp để thích liên kết này cũng như giải thích các phạm vi maven bạn cần biết http://stackoverflow.com/questions/7104364/how-are-maven-scopes-mapped-to- ivy-cấu hình-by-ivy – pvgoddijn

Các vấn đề liên quan