Lỗi: Xung đột với sự phụ thuộc 'com.google.code.findbugs: jsr305'


241

Tôi đã tạo một dự án mới trong Android Studio 2.2 Preview 1 với ứng dụng Android và mô-đun cuối cùng với Google Messaging. Đây là tệp ứng dụng:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"
    defaultConfig {
        applicationId "com.xxx.xxx"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
    compile 'com.google.android.gms:play-services-gcm:9.0.0'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

Nhưng đó là cho:

Lỗi: Xung đột với sự phụ thuộc 'com.google.code.findbugs: jsr305'. Các phiên bản đã giải quyết cho ứng dụng (1.3.9) và ứng dụng thử nghiệm (2.0.1) khác nhau. Xem http://g.co/androidstudio/app-test-app-conflict để biết chi tiết.

Tôi mới dùng Android và không thể tìm thấy lỗi này là gì. Làm thế nào để tôi sửa chữa nó?

Câu trả lời:


641

Trong ứng dụng của bạn, hãy build.gradlethêm vào như sau:

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
    }
}

Thực thi Gradle chỉ biên dịch số phiên bản mà bạn nêu cho tất cả các phụ thuộc, bất kể số phiên bản nào mà các phụ thuộc đã nêu.


57
Nó có thể hữu ích để giải thích đoạn trích này.
Andrew Gallasch

18
@Andy nó nói rõ ràng với Gradle phiên bản nào sẽ được biên dịch (bất kể phiên bản nào là trạng thái phụ thuộc) ... trong khi thực thi v 2.0.1hoạt động (bất cứ điều gì, cả hai phiên bản đều cần phải giống hệt nhau).
Martin Zeitler

2
@MartinZeitler nhưng nó không thực sự giải thích vấn đề này đến từ đâu. Hôm nay tôi gặp vấn đề này với testImcellenceation 'junit: junior
fralbo

1
Cảm ơn rất nhiều. Điều này thực sự hữu ích vẫn còn sau 3 năm rưỡi. ;)
Kartik

1
@Kartik haha ​​jeeze, đã lâu lắm rồi! Đừng lo lắng, cảm ơn bạn, tôi hy vọng nó sẽ giúp! Tôi đã ngừng phát triển Android từ lâu nhưng tôi chắc chắn một ngày nào đó tôi sẽ chọn lại nó
gbhall

170

Điều này là do espresso. Bạn có thể thêm các mục sau vào ứng dụng của mình build.gradeđể giảm thiểu điều này.

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') {
  exclude group: 'com.google.code.findbugs'
}

1
Không làm việc. Câu hỏi được đặt làm câu trả lời hoạt động.
Warpzit

2
@Warpzit - Điều này làm việc cho tôi (cũng như câu trả lời được chấp nhận).
Ted Hopp

@TedHopp Tôi thực sự đã làm một cái gì đó khác. Tôi gặp vấn đề với trình biên dịch gradle cho api youtube vì vậy cuối cùng tôi đã sử dụng lib jar.
Warpzit

2
Đây rất có thể là câu trả lời mà mọi người đang tìm kiếm. Trong hầu hết các trường hợp, Android Studio bao gồm Espresso theo mặc định trong danh sách phụ thuộc và bạn cần loại trừ một vài điều để sử dụng nó cùng với các thư viện khác. Ngoài những gì @Santhosh nói, tôi cũng vậyexclude group: 'com.android.support', module: 'support-annotations'
milosmns

1
Vâng, tôi vừa xóa androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {loại trừ nhóm: 'com.google.code.findbugs'} và nó hoạt động: D vì chủ yếu là vấn đề với cách khắc phục của bạn là một số người đã có * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {loại trừ nhóm: 'com.android.support', mô-đun: 'hỗ trợ-chú thích' }) * một cái gì đó như thế này trong tập tin lớp của họ và thêm một loại trừ khác đang ném một ngoại lệ, tất cả các kịch bản phân loại mưa đá, vẫn là một upvote cho bạn :)
ShayHaned

31

PHƯƠNG PHÁP 1: Tôi đã xóa androidTestCompile trên dòng espresso-core được tự động đưa vào một dự án mới. Sau đó, Android Studio của tôi biên dịch sạch.

AndroidTestCompile nằm trong "build.gradle (Module: app)":

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    ...
}

Tôi không biết liệu việc xóa này có gây ra vấn đề gì không, nhưng chắc chắn nó có hiệu quả với dự án hiện tại của tôi không.

PHƯƠNG PHÁP 2: Thêm một loại trừ trên findbugs cũng hoạt động:

dependencies {
    ...
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.google.code.findbugs'
    })
    ...
}

PHƯƠNG PHÁP 3: Buộc biên dịch với một phiên bản cụ thể:

(Trong phần sau tôi buộc nó phải biên dịch với phiên bản cao hơn.)

dependencies {
    ...
    androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
    ...
}

có bản cập nhật phiên bản: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft

18

Từ Hướng dẫn sử dụng Plugin Gradle :

Khi chạy thử nghiệm thiết bị, cả APK chính và APK thử nghiệm đều có chung đường dẫn. Xây dựng lớp sẽ thất bại nếu APK chính và APK thử nghiệm sử dụng cùng một thư viện (ví dụ: Guava) nhưng trong các phiên bản khác nhau. Nếu gradle không nắm bắt được điều đó, ứng dụng của bạn có thể hoạt động khác đi trong các bài kiểm tra và trong quá trình chạy bình thường (bao gồm cả sự cố trong một trong các trường hợp).

Để xây dựng thành công, chỉ cần đảm bảo cả hai APK đều sử dụng cùng một phiên bản. Nếu lỗi là do phụ thuộc gián tiếp (thư viện bạn không đề cập đến trong build.gradle của mình), chỉ cần thêm phụ thuộc cho phiên bản mới hơn vào cấu hình

Thêm dòng này vào phụ thuộc build.gradle của bạn để sử dụng phiên bản mới hơn cho cả hai APK:

compile('com.google.code.findbugs:jsr305:2.0.1')

Để tham khảo trong tương lai, bạn có thể kiểm tra Bảng điều khiển Gradle của mình và nó sẽ cung cấp một liên kết hữu ích bên cạnh lỗi để giúp khắc phục mọi lỗi xây dựng lớp.


8

Lý do tại sao điều này xảy ra là phụ thuộc diff sử dụng cùng lib của phiên bản diff.
Vì vậy, có 3 bước hoặc (1 bước) để giải quyết vấn đề này.

1

Thêm vào

configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}

để build.gradletập tin của bạn trongandroid {...}

lần 2

Thiết bị đầu cuối mở trong android
chạy ./gradlew -q app:dependencieslệnh.

lần thứ 3

Nhấp vào Clean Projecttừ thanh menu của studio android trong Builddanh sách.
Nó sẽ xây dựng lại dự án, và sau đó removemã trong bước 1.

Có lẽ bạn chỉ cần thực hiện bước 2. Tôi không thể quay lại khi xảy ra lỗi. Thử.


7

Khi tôi thêm vào module: 'jsr305'như một tuyên bố loại trừ bổ sung, tất cả đều hoạt động tốt với tôi.

 androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'jsr305'

})


6

Vấn đề, như đã nêu trong nhật ký của bạn, là 2 phụ thuộc đang cố gắng sử dụng các phiên bản khác nhau của phụ thuộc thứ 3. Thêm một trong những điều sau đây vào tệp phân loại ứng dụng:

androidTestCompile 'com.google.code.findbugs:jsr305:2.0.1'
androidTestCompile 'com.google.code.findbugs:jsr305:1.3.9'

4
  1. Câu trả lời được chấp nhận là một cách khắc phục vấn đề, bởi vì nó sẽ chỉ áp dụng một số chiến lược cho sự phụ thuộc có vấn đề (com.google.code.findbugs: jsr305) và nó sẽ giải quyết vấn đề xung quanh dự án, sử dụng một số phiên bản của phụ thuộc này. Về cơ bản, nó sẽ sắp xếp các phiên bản của thư viện này trong toàn bộ dự án.

  2. Có một câu trả lời từ @Santhosh (và một vài người khác), người đề nghị loại trừ sự phụ thuộc tương tự cho espresso, hoạt động theo cùng một cách, nhưng nếu dự án có một số phụ thuộc khác phụ thuộc vào cùng một thư viện (com.google .code.findbugs: jsr305), một lần nữa chúng ta sẽ gặp vấn đề tương tự. Vì vậy, để sử dụng phương pháp này, bạn sẽ cần loại trừ cùng một nhóm khỏi tất cả các phụ thuộc của dự án, những người phụ thuộc vào com.google.code.findbugs: jsr305. Cá nhân tôi thấy rằng Ý định Espresso Contrib và Espresso cũng sử dụng com.google.code.findbugs: jsr305.

Tôi hy vọng những suy nghĩ này sẽ giúp ai đó nhận ra chính xác những gì đang xảy ra ở đây và cách mọi thứ hoạt động (không chỉ sao chép dán một số mã) :).


3

Thêm phần này vào phần phụ thuộc để bắt buộc sử dụng phiên bản mới nhất của thư viện findbugs:

compile 'com.google.code.findbugs:jsr305:2.0.1'

2

xóa phụ thuộc espresso trong tập tin gradle làm việc cho tôi.

xóa những dòng đó trong tập tin lớp ứng dụng:

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})

3
Nếu bạn chỉ xóa phần phụ thuộc espresso, bạn không thể kiểm tra ứng dụng của mình nữa để giải pháp này rõ ràng không hoạt động.
Heinrich

1

Những người nhận được cùng một lỗi trong Android 3.0.1, có thể giải quyết nó bằng cách chỉ cần cập nhật các phiên bản của compileSdkVersiontargetSdkVersion đến 27 và cũng Thực hiện com.android.support:appcompat-v7:27.1.1' ở phụ thuộc .


1

Trong dự án ': ứng dụng', bạn có thể thêm phần sau vào tệp ứng dụng / build.gradle của mình:

android {
 configurations.all {
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
 }
 }

1

Đối với căn cứ phản ứng tự nhiên , việc thêm phần này app/build.gradlevào phần phụ thuộc đã khiến nó hoạt động với tôi:

implementation('com.squareup.okhttp3:okhttp:3.12.1') { force = true }
implementation('com.squareup.okio:okio:1.15.0') { force = true }
implementation('com.google.code.findbugs:jsr305:3.0.2') { force = true}

Đây là lần đầu tiên tôi thấy cờ {force = true}. Tôi đã thử nó và nó làm việc ngay lập tức cho tôi. Tôi cần giữ androidx.appcompat ở v1.0.2 cho dự án của mình vì thư viện tôi đã thêm có phụ thuộc được đặt thành v1.1.0.
MikeOscarEcho

0

tôi đã cố gắng sử dụng công văn liên kết sâu airbnb và đã gặp lỗi này. tôi cũng phải loại trừ nhóm findbugs khỏi annotationProcessor.

//airBnb
    compile ('com.airbnb:deeplinkdispatch:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }
    annotationProcessor ('com.airbnb:deeplinkdispatch-processor:3.1.1'){
        exclude group:'com.google.code.findbugs'
    }

0

PHẢN ỨNG TỰ NHIÊN

Nếu bạn đang tìm kiếm giải pháp gốc phản ứng, thì hãy viết đoạn mã này vào tệp xây dựng lớp grad_modules bị ảnh hưởng của bạn, ví dụ như firebase trong trường hợp của tôi.

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
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.