2010-07-02 30 views
11

Tôi có một dự án phụ thuộc vào một tạo tác được kiểm soát bởi nhà cung cấp. Tạo tác này chứa một số lớp mà tôi phụ thuộc vào và một số lớp cũ hơn và gây ra các vấn đề. Có cách nào để có được maven tự động mở rộng một cái lọ, loại bỏ các lớp học, và tái đóng gói chúng như là một phụ thuộc? Tôi sẽ cố gắng đưa ra một ví dụ.Loại trừ các lớp học khỏi sự phụ thuộc vào Maven

supplier:artifact:1.0.0 
com.supplier.useful.ClassA 
com.supplier.dto.ClassB (old) 

us:dependency:1.1.20 
com.supplier.dto.ClassB (new) 

us:project-web:1.1.20 
- supplier:artifact:1.0.0 
- us:dependency:1.1.20 

Vì vậy, - tôi cần phải sử dụng ClassA trong dự án web, nhưng tôi cần phải sử dụng ClassB từ dependency artifact. Tôi không thể sửa đổi nhà cung cấp: tạo tác, hoặc chúng tôi: sự phụ thuộc.

Bất kỳ ý tưởng nào ?!

Trả lời

8

Kể từ phiên bản 2.0.9 maven giữ trật tự classpath vì vậy nếu bạn xác định các lớp vá của bạn trong một jar TRƯỚC KHI nhà cung cấp jar nó sẽ ẩn việc triển khai nhà cung cấp.

Hoặc bạn có thể xem maven shade plugin vì nó thực hiện chính xác những gì bạn đang hỏi theo tôi.

5

Nếu bạn đang sử dụng Maven 2.0.9+, sau đó chỉ cần đặt lớp học của bạn trong một cái bình và tuyên bố nó là phụ thuộc trước khi tạo phẩm từ nhà cung cấp của bạn. Như đã đề cập bởi @Peter, Maven sử dụng thứ tự pom cho classpath từ Maven 2.0.9 (xem MNG-1412/MNG-3111).

Nếu vì bất cứ lý do bạn không hài lòng với giải pháp này, sau đó bạn có thể sử dụng Maven Dependency Plugin để giải nén phụ thuộc vào target/classes (mà phải được trên classpath biên dịch) sử dụng dependency:unpack với một số excludes (xem Unpacking specific artifacts). Tôi thậm chí sẽ không cố gắng đóng gói lại nó, điều này sẽ giới thiệu sự phức tạp vô dụng (thay thế cái lọ cũ bằng cái mới trên classpath biên dịch sẽ không tầm thường, nếu khả thi).

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