2012-01-14 22 views
6

Chúng tôi đã sử dụng Ivy trong một vài tháng và có tổ chức riêng của chúng tôi "Ivy Repo" trên một máy chủ web ở đây trong văn phòng. Tất cả các dự án của chúng tôi được cấu hình để đi đến repo này để giải quyết các phụ thuộc.Ivy: Giải quyết và xuất bản JARs cục bộ

Chúng tôi có một số loại JAR "commons" được nhiều dự án của chúng tôi sử dụng. Bởi vì điều này, và bởi vì chúng tôi chỉ có 1 repo, chúng tôi đang tìm thấy rất nhiều chi phí xấu xí đến từ kịch bản sau đây:

  • Một nhà phát triển được giao nhiệm vụ thêm tính năng vào Project 1 (phụ thuộc vào một cái bình thường)
  • trong quá trình phát triển dự án 1, các nhà phát triển nhận ra anh/cô ấy cần phải thay đổi các jar Common
  • thay đổi jar chung được thực hiện
  • jar chung phải trải qua xem xét mã và bình thường mã khuyến mãi
  • Tạo bản chính xuất bản mới Bình chung
  • Dự án 1 có thể tiếp tục phát triển ngay bây giờ Bình thường đã được cập nhật

Điều này trở nên vô lý và gây đau đớn cho nhóm của chúng tôi.

Với tôi, giải pháp hiển nhiên là cung cấp các mục tiêu kiến ​​trong mỗi dự án cho phép nhà phát triển xuất bản/giải quyết cục bộ (đến và từ hệ thống tệp của họ). Bằng cách đó họ có thể phá vỡ các bình thường 9 cách để chủ nhật, nhưng mà không mất 2 - 4 ngày trong khi chờ đợi chung để được xuất bản. Bằng cách này, nhà phát triển thực hiện các thay đổi cục bộ cho cả Dự án 1 và Chung và mã sẽ trải qua quá trình xúc tiến của chúng tôi cùng một lúc.

Tôi biết điều này là có thể với Ivy, nhưng tôi rất mới với nó tôi thậm chí sẽ không biết bắt đầu từ đâu.

Hiện tại chúng tôi sử dụng tệp toàn cầu ivy.settings cho tất cả các dự án. Trong tệp cài đặt, chúng tôi sử dụng giải pháp chuỗi có 1 trình phân giải url bên trong, kết nối với "ivy repo" của chúng tôi.

tôi tin sau đây là sự thay đổi duy nhất mà sẽ là cần thiết, nhưng tôi không chắc chắn 100%:

  • Trong ivy.settings chúng tôi sẽ cần phải thêm một địa phương hệ thống tập tin phân giải trước sự trình phân giải url được gọi; Bằng cách này chúng tôi kiểm tra hệ thống tập tin địa phương cho phụ thuộc trước khi chuyển sang các repo ivy (web server)
  • Configure mỗi ivy.xml với một lựa chọn dự án nào đó cho phép bộ nhớ cache địa phương xuất bản
  • Tweak Ant xây dựng để có một mục tiêu publish-locally rằng bài tập tùy chọn nêu trên

tôi tin những thay đổi này sẽ cho phép chúng tôi: (1) luôn nhìn cục bộ cho phụ thuộc trước khi tìm đến máy chủ web, (2) công bố tại địa phương như là một lựa chọn xây dựng (mục tiêu).

Nếu điều này không đúng hoặc nếu tôi thiếu bất kỳ bước nào, hãy vui lòng thông báo! Nếu không, tôi có thể tìm ra cách thêm trình phân giải hệ thống tệp từ tài liệu Ivy, nhưng không biết làm thế nào để có được mục tiêu publish-locally hoạt động. Bất kỳ ý tưởng? Cảm ơn trước!

Trả lời

2

Ivy hỗ trợ các phiên bản động:

đang ổn định sẽ tham khảo các phiên bản đã được phê duyệt mới nhất của commons jar:

<dependency org="my-org" name="commons" rev="latest.release"/> 

ổn định (đang phát triển) mã sẽ tham khảo các phiên bản không được chấp thuận mới nhất của mã

<dependency org="my-org" name="commons" rev="latest.integration"/> 

Vì vậy, bạn cần phải thay đổi quy trình xây dựng cho mô-đun commons của bạn để có hai mục tiêu xuất bản. Một cho ảnh chụp nhanh không ổn định của mã của bạn khác cho các bản phát hành chính thức.

(Xem thuộc tính trạng thái trên ivy publish nhiệm vụ)

Lưu ý: Trong Maven bạn có hai loại kho lưu trữ, phát hành và bản chụp. Ivy hỗ trợ cho khái niệm này là tinh tế hơn và mạnh mẽ hơn IMHO.

2

Tôi cũng thích cách tiếp cận của Mark.

Đến publish-locally bạn có thể yêu cầu tác vụ xuất bản giải quyết (resolver="local") để sử dụng. Bằng cách này, nó có thể xuất bản lên hệ thống tệp cục bộ hoặc tới bất kỳ trình phân giải đã xác định nào.

<ivy:publish 
     resolver="local" 
     overwrite="true" 
     revision="${project.version}"> 
     <artifacts pattern="dist/[artifact]-[revision].[type]" /> 
    </ivy:publish> 

Và nếu bạn sử dụng trình phân giải chuỗi, bạn nên đặt returnFirst="true" để giải quyết sẽ dừng khi có nội dung được tìm thấy cục bộ.

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