2015-06-10 25 views
6

Tôi đang cố gắng xây dựng điểm cuối REST Dropwizard (Jersey) giao tiếp với HBase. Mặc dù đây là hai phụ thuộc cấp cao nhất của tôi, cả hai phụ thuộc này đều được nạp với nhiều phụ thuộc chuyển tiếp xung đột. Một ví dụ đơn giản của một cuộc xung đột như vậy là của Google Ổi:Giải quyết xung đột phụ thuộc transitive trong Java

  • Client HBase xác định phiên bản 11
  • Dropwizard định 18

Dropwizard sẽ không làm việc với phiên bản 11 và HBase sẽ không làm việc với phiên bản 18

Tôi đã kiểm tra tài liệu về plugin bóng đổ Maven, nhưng dường như nó không cho phép bạn định vị lại các lớp được tìm thấy trong các lọ phụ thuộc. Vì vậy, tôi không biết làm thế nào để giải quyết vấn đề này ngắn tách hai thành phần này thành các JVM riêng biệt.

+0

Bạn có thể cung cấp thêm chi tiết về lý do tại sao mỗi người không thể chạy với phiên bản ổi được nâng cấp/hạ cấp? –

+0

Xung đột là a'many, nhưng một trong số đó đã giết tôi là 'com.google.common.base.Stopwatch', trong đó giữa các phiên bản 17 và 18 API thay đổi mà không có bất kỳ hình thức phản đối nào –

+0

Không có cơ hội giả mạo HBase và nâng cấp phụ thuộc ? –

Trả lời

1

Đây là giải pháp bẩn. Nhưng bạn có thể ...

Tạo dự án/mô-đun nơi bạn xác định bộ giao diện dịch vụ mà ứng dụng dropwizard của bạn sẽ sử dụng để nói chuyện với HBase.

Tạo một mô-đun/dự án khác triển khai các giao diện này và sử dụng các lớp HBase. Shade dự án này.

Trong dự án Dropwizard của bạn chỉ bao gồm các giao diện jar nhưng tạo ra một nhiệm vụ để sao chép các tạo tác bóng vào tài nguyên của bạn.

Tạo JARClassLoader cho tạo phẩm khách hàng HBase bóng mờ của bạn. Bạn có thể phải tạo một lớp con đặc biệt không ủy nhiệm cho cha mẹ theo mặc định trình nạp lớp sẽ yêu cầu cha mẹ giải quyết các liên kết và có thể kéo phiên bản mới hơn của ổi từ bộ nạp lớp bên ngoài.

Yêu cầu một thể hiện của hợp đồng dịch vụ từ bộ nạp Jar ...

Businessing api = Class.forName("com.awesome.Businessing", true, jarLoader).newInstance();

0

Cố gắng xác định phiên bản cụ thể cho những người phụ thuộc trong <dependencyManagement/> phần của bạn pom.xml.

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