2014-07-06 23 views
6

Tôi đang sử dụng Gradle cho dự án của mình. Một trong những phụ thuộc tôi đã xác định trong build.gradle của tôi là
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'Sự phụ thuộc này cho tôi hai phiên bản của một cái bình. Làm thế nào để sửa lỗi này?

này hoạt động tốt trên một ứng dụng Java bình thường, tuy nhiên khi tôi cố gắng xây dựng nó trên Android tôi nhận được:

Khi nhìn vào mà thư viện được tham chiếu, rõ ràng là có cả hai javax.inject-2.3.0-b05.jarjavax.inject-1.jar, mà tôi thấy được thêm bởi sự phụ thuộc ở trên. Tôi đoán rằng jar 'trùng lặp' này là nguyên nhân gây ra lỗi xây dựng.

Tôi làm cách nào để thực hiện việc này? Tại sao phụ thuộc bao gồm hai của cùng một lọ? Có cách nào để làm cho phiên bản Android được xây dựng với hai lọ này hoặc để loại bỏ một trong các lọ này không?

Trả lời

2

Dường như bạn có một cây phụ thuộc giống

project 
|--- org.glassfish.jersey.media:jersey-media-moxy:2.0 
| \--- *:javax.inject:1 
\--- *:javax.inject:2.3.0-b05 

đâu * là nhóm, mà tôi nghi ngờ có thể khác với những hai.

Hãy thử lấy một ý tưởng về cách phụ thuộc của bạn đang được nắm lấy bằng công nhiệm vụ dependency

gradle dependency 

Nếu bạn cần loại trừ một sự phụ thuộc vào nó trong thẻ, tương tự như ví dụ dưới đây

compile('org.hibernate:hibernate:3.1') { 
    //excluding a particular transitive dependency: 
    exclude module: 'cglib' //by artifact name 
    exclude group: 'org.jmock' //by group 
    exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group 
} 
1

Thông thường gradle sẽ chỉ bao gồm 1 bình cho mỗi phụ thuộc. Nếu phiên bản khác nhau được tìm thấy cho cùng một depedencies, phiên bản mới hơn sẽ được sử dụng.

Tuy nhiên, trong trường hợp của bạn, những 2 lọ là phụ thuộc với tên nhóm khác nhau:

'javax.inject:javax.inject:1' 
'org.glassfish.hk2.external:javax.inject:2.3.0-b05' 

Đó là lý do gradle bao gồm cả khi chúng được coi là phụ thuộc khác nhau.

'javax.inject: javax.inject: 1' rất cũ, tôi nghĩ bạn nên loại trừ nó như những gì Niels Bech Nielsen nói.

Để tìm ra nơi được phụ thuộc này đến từ đâu, bạn có thể sử dụng lệnh:

gradle -q dependencyInsight --dependency inject 
Các vấn đề liên quan