2012-04-10 3 views
7

Ví dụ tôi có sự phụ thuộc:Maven phụ thuộc: loại trừ một lớp

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.5.6</version> 
</dependency> 

Có thể loại trừ một lớp, ví dụ org/slf4j/Marker.class?

+0

'loại trừ' trong giai đoạn nào - biên dịch hay gói? – Raghuram

+0

gói trong .ear, sử dụng maven-ear-plugin – Ilya

+1

hmm! những gì bạn cần trong .ear là 'slf4j-api.jar' không có lớp được chỉ định. Không có cách nào đơn giản để đạt được điều này. – Raghuram

Trả lời

3

Trừ một lớp duy nhất trong không thể. Trong các thẻ <dependency> bạn có thể xác định <exclusions/>. Tuy nhiên, đây là cho toàn bộ phụ thuộc.

Plugin bóng râm phải được xử lý cẩn thận. Nói chung, thực hành không tốt là tạo một cái lọ chứa tất cả các phụ thuộc của bạn ở một nơi vì nó có xu hướng dẫn đến các vấn đề nếu bạn đang sử dụng tạo phẩm được sản xuất trong một dự án khác như một sự phụ thuộc. Ví dụ, shading slf4j trong jar của bạn và sau đó tùy thuộc vào artifact của bạn trong một dự án khác, nơi bạn có slf4j khác sẽ mang lại cho bạn đau buồn.

2

Bạn có thể thay đổi các lớp đó và xác định chúng trong một lọ/mô-đun khác cần được bao gồm dưới dạng phụ thuộc trước bình cung cấp phụ thuộc nơi lớp của bạn bị loại trừ (Marker.class).

Maven nhớ thứ tự classpath từ phiên bản 2.0.9.