Tránh xung đột phiên bản phụ thuộc?


10

Bất kỳ dự án Java nào sử dụng jar của tôi, gần như chắc chắn sẽ có một phụ thuộc bổ sung vào một jar khác, mà jar của tôi cũng chứa như một phụ thuộc.

Vấn đề là, cái bình khác có nhiều phiên bản.

Làm cách nào tôi có thể tránh mọi vấn đề có thể phát sinh, trong trường hợp có khả năng phiên bản bình thứ 2 của dự án của bạn khác với phiên bản bình thứ 2 của bình của tôi?

Tôi không muốn người dùng của mình gặp thêm rắc rối khi thực hiện một số thủ thuật tải lớp lạ mắt để thêm bình của tôi.

Tôi có nên tạo ra một loạt các phiên bản khác nhau của bình của mình, cho mọi phiên bản có thể có của sự phụ thuộc chung đó không? Và sau đó bạn chỉ cần chọn phiên bản bình của tôi sử dụng cùng một phiên bản của bình thứ 2 mà bạn đã có?

Có cách nào thông minh hơn để xử lý việc này không, và giúp mọi người sử dụng bình của tôi dễ dàng hơn mà không có xung đột?

Câu trả lời:


10

Đó không phải là vấn đề của bạn . Tùy thuộc vào người dùng cuối của bạn để giải quyết. Nó chỉ đi kèm với lãnh thổ sử dụng các phụ thuộc của bên thứ ba và tôi đã phải giải quyết xung đột phụ thuộc nhiều lần hơn tôi tính. Bạn không thể mong đợi để giải quyết xung đột phụ thuộc cụ thể của mọi dự án.

Phần mềm của bạn sẽ hoạt động chính xác với các phiên bản mới nhất của phần phụ thuộc của bạn. Trừ khi sự phụ thuộc đang thay đổi giao diện của họ trên mỗi bản phát hành, bạn nên có một phạm vi tương thích (ví dụ: phần mềm của bạn hoạt động cho tất cả các phiên bản của dep trong phạm vi [2.0.0, 3.0.0)). Miễn là bạn đang duy trì phần mềm, bạn nên cố gắng giữ cho nó tương thích với phiên bản mới nhất của tất cả các phụ thuộc của bạn.

Điều đó nói rằng, đây là một số điều tôi sẽ thấy hữu ích khi là nhà phát triển sử dụng phần mềm của bạn với phiên bản phụ thuộc khác nhau của tôi.

  • Nếu sự tích hợp giữa dự án của bạn và dự án khác chặt chẽ, thật hữu ích khi có một biểu đồ tương thích trong tài liệu của bạn. Bất kể, bạn nên đề cập đến bất kỳ vấn đề đã biết với các phiên bản cụ thể của sự phụ thuộc trong tài liệu của bạn. Nếu không, các nhà phát triển phải tìm một phiên bản tương thích bằng cách dùng thử và lỗi.
  • Tóm tắt sự hợp tác với sự phụ thuộc thông qua một giao diện và thiết kế phần mềm của bạn để việc triển khai có thể được thay thế bằng tiêm phụ thuộc. Điều đó cho phép tôi là người dùng cuối thay thế tích hợp của riêng tôi với phiên bản x của thư viện mà không làm phiền bạn.
  • Có một trình theo dõi vấn đề công khai để người dùng của bạn có thể yêu cầu bạn hỗ trợ một số phiên bản nhất định của sự phụ thuộc chung. Nếu bạn thấy nhiều người dùng muốn hỗ trợ cho phiên bản phụ thuộc không tương thích, bạn có thể xuất bản phiên bản cho cả hai. Xem ví dụ Maven này nơi họ nhắm mục tiêu nhiều nền tảng - hỗ trợ cho các phiên bản phụ thuộc khác nhau sẽ tương tự nhau.

Java có cái gì đó giống như cài đặt bindRedirect App.config trong .NET không, nơi bạn có thể chỉ định "các thư viện yêu cầu phụ thuộc Foo v3.0.2 thực sự nên sử dụng Foo v3.0.5 và giả vờ như đó là v3.0.2"? Tôi đã không làm Java được hơn 11 năm rồi nên trí nhớ của tôi về cách nó xử lý nó chỉ là ĐÁNH GIÁ.
John Zabroski
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.