Chúng tôi có hệ thống Java lớn (> 500.000 LOC) phụ thuộc vào gói 40-50 OSS . Hệ thống được xây dựng với Ant và quản lý phụ thuộc là được xử lý thủ công hiện tại. Tôi đang điều tra Ivy và/hoặc Maven để tự động phụ thuộc. Chúng tôi đã xem Maven như một hệ thống tự động hóa xây dựng năm ngoái và từ chối nó bởi vì nó sẽ yêu cầu hoàn toàn tái cơ cấu hệ thống của chúng tôi để phù hợp với kiến trúc của Maven. Bây giờ tôi đang tìm cách tự động hóa các tác vụ quản lý phụ thuộc.Quản lý phụ thuộc hệ thống Java lớn
Tôi đã thực hiện một số thử nghiệm với Ivy nhưng đã gặp sự cố. Ví dụ: khi tôi chỉ định ActiveMQ làm phụ thuộc và cho Ivy biết sử dụng POM trong kho lưu trữ Maven để biết đặc điểm phụ thuộc, Ivy truy xuất một loạt gói (Jetty, Derby và Geronimo cho ví dụ ) mà tôi biết aren ' t cần thiết để chỉ sử dụng ActiveMQ.
Nếu tôi đặt usepoms = "false" trong ivysettings.xml rồi nó lấy chỉ activemq.jar, nhưng điều đó dường như đánh bại mục đích của Ivy và relegates nó vào một jar-fetcher đơn giản với tay xây dựng phụ thuộc thông số kỹ thuật .
Có vấn đề lớn hơn ở đây, những gì thường được gọi là "DLL Hell" trong Windows. Trong một số trường hợp, hai phụ thuộc cấp đầu tiên trực tiếp sẽ trỏ đến các phiên bản khác nhau của cùng một phụ thuộc chuyển tiếp (đối với instance log4j.jar). Chỉ có một log4j.jar có thể ở trong classpath, do đó, độ phân giải phụ thuộc liên quan đến việc xác định phiên bản nào là tương thích với tất cả các máy khách trong hệ thống của chúng tôi.
Tôi đoán là tất cả đều có chất lượng phụ thuộc của từng gói đặc điểm kỹ thuật (POM). Trong trường hợp ActiveMQ, không có phạm vi khai báo , vì vậy mọi tham chiếu đến ActiveMQ sẽ tải xuống tất cả các phụ thuộc của chúng tôi trừ khi chúng tôi loại trừ một cách thủ công những gì chúng tôi biết chúng tôi không muốn.
Trong trường hợp của log4j, độ phân giải phụ thuộc tự động sẽ đòi hỏi rằng tất cả các khách hàng log4j của (các gói khác phụ thuộc vào log4j) xác nhận đối với tất cả các phiên bản trước của log4j và cung cấp một phạm vi (hoặc list) của các phiên bản log4j tương thích trong POM. Đó có thể là quá nhiều điều để hỏi.
Đây có phải là trạng thái hiện tại của sự cố hay tôi thiếu gì đó không?
+1 để mô tả rõ ràng vấn đề với các giải pháp đã thử. Tôi hy vọng bạn nhận được câu trả lời hay. –
4 câu trả lời được bình chọn hàng đầu đều cung cấp góc nhìn có giá trị. Kevin là ngắn gọn và chính xác. Robert và Rich cung cấp nhiều chi tiết hơn. Vladimir đóng góp một ý kiến tích cực dựa trên kinh nghiệm thực tế. Cả bốn cùng nhau giúp tôi đặt ra kỳ vọng của mình và chỉ ra cách giải quyết vấn đề. Tôi muốn "chấp nhận" tất cả bốn câu trả lời, nhưng SO không cho phép điều đó. Tôi cho phép Robert Munteanu chấp nhận vì anh ta là người đầu tiên trả lời chi tiết. –