ข้อผิดพลาด: ขัดแย้งกับการพึ่งพา 'com.google.code.findbugs: jsr305'


241

ฉันสร้างโครงการใหม่ในAndroid Studio 2.2 ดูตัวอย่าง 1ด้วยแอพ Android และโมดูลแบ็กเอนด์ด้วย Google Messaging นี่คือไฟล์แอพ:

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')
}

แต่มันให้:

ข้อผิดพลาด: ขัดแย้งกับการพึ่งพา 'com.google.code.findbugs: jsr305' เวอร์ชันที่แก้ไขสำหรับแอป (1.3.9) และแอปทดสอบ (2.0.1) แตกต่างกันไป ดูhttp://g.co/androidstudio/app-test-app-conflictสำหรับรายละเอียด

ฉันใหม่สำหรับ Android และไม่สามารถค้นหาข้อผิดพลาดนี้ได้ ฉันจะแก้ไขได้อย่างไร

คำตอบ:


642

ในแอปของคุณbuild.gradleเพิ่มสิ่งต่อไปนี้:

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

บังคับให้ Gradle รวบรวมเฉพาะหมายเลขรุ่นที่คุณระบุสำหรับการอ้างอิงทั้งหมดไม่ว่าจะขึ้นอยู่กับหมายเลขรุ่นใดที่อ้างอิงได้


57
มันอาจมีประโยชน์ในการอธิบายตัวอย่างนี้
Andrew Gallasch

18
@Andy มันบอก Gradle อย่างชัดเจนว่าเวอร์ชันใดที่จะถูกรวบรวม (ไม่ว่าหมายเลขเวอร์ชันใดจะขึ้นอยู่กับสถานะการอ้างอิง) ... ในขณะที่บังคับใช้ v ให้2.0.1ทำงานด้วยเช่นกัน (ไม่ว่าอะไรก็ตาม
Martin Zeitler

2
@MartinZeitler แต่มันไม่ได้อธิบายอย่างแท้จริงว่าปัญหานี้มาจากไหน วันนี้ฉันได้รับปัญหานี้ด้วยการทดสอบการใช้งาน 'junit: junit: 4.12' androidTestImplementation 'com.android.support.test: นักวิ่ง: 1.0.1' androidTestImplementation 'com.android.support.test.espresso: espresso-core: 3.0.1'
ฟัลโบ

1
ขอบคุณมาก สิ่งนี้มีประโยชน์จริง ๆ หลังจาก 3 ปีครึ่ง ;)
Kartik

1
@Kartik ฮ่าฮ่า jeeze มันนานมาแล้ว! ไม่ต้องกังวลขอบคุณฉันหวังว่ามันจะช่วยได้! ฉันหยุดการพัฒนา Android มานาน แต่ฉันแน่ใจว่าวันหนึ่งฉันจะหยิบมันขึ้นมาอีกครั้ง😊
gbhall

170

นี่คือสาเหตุที่เอสเพรสโซ คุณสามารถเพิ่มสิ่งต่อไปนี้ในแอพของคุณbuild.gradeเพื่อลดสิ่งนี้

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

1
ไม่ทำงาน. คำถามที่ตั้งไว้เป็นคำตอบที่ได้ผล
Warpzit

2
@Warpzit - สิ่งนี้ใช้ได้สำหรับฉัน (เช่นเดียวกับคำตอบที่ยอมรับ)
Ted Hopp

@ เต็ดฮอปฉันลงเอยด้วยการทำอย่างอื่นจริง ๆ ฉันมีปัญหากับการรวบรวม gradle สำหรับ youtube api ดังนั้นฉันจึงลงเอยด้วยการใช้ lib jar แทน
Warpzit

2
นี่เป็นคำตอบที่ทุกคนกำลังมองหา ในกรณีส่วนใหญ่ Android Studio จะรวม Espresso โดยค่าเริ่มต้นในรายการการพึ่งพาและคุณจำเป็นต้องแยกบางสิ่งเพื่อใช้กับไลบรารีอื่น ๆ นอกเหนือจากสิ่งที่ @Santosh พูดแล้วฉันยังexclude group: 'com.android.support', module: 'support-annotations'
milosmns

1
ฉันเพิ่งลบandroidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2') {ยกเว้นกลุ่ม: 'com.google.code.findbugs'}และใช้งานได้: D เพราะปัญหาหลักกับ การแก้ไขของคุณคือบางคนมี * androidTestCompile ('com.android.support.test.espresso: espresso-core: 2.2.2', {ยกเว้นกลุ่ม: 'com.android.support', โมดูล: 'support-annotations' }) * บางอย่างเช่นนี้ในแฟ้ม gradle ของพวกเขาและเพิ่มอีกยกเว้นมีการขว้างปาข้อยกเว้นทุกสคริปต์ลูกเห็บ gradle, ยังคงเป็น upvote สำหรับคุณ :)
ShayHaned

31

วิธีที่ 1: ฉันลบ androidTestCompile บนสายเอสเพรสโซแกนซึ่งรวมอยู่ในโครงการใหม่โดยอัตโนมัติ จากนั้นสตูดิโอ Android ของฉันก็ทำความสะอาด

androidTestCompile อยู่ใน "build.gradle (โมดูล: แอป)":

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

ฉันไม่ทราบว่าการลบนี้จะมีปัญหาใด ๆ ตามถนนหรือไม่ แต่มันก็ใช้ได้กับโครงการปัจจุบันของฉันในตอนนี้

วิธีที่ 2: การเพิ่มการแยกใน findbugs ก็ทำงานได้เช่นกัน:

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'
    })
    ...
}

วิธีที่ 3: บังคับให้คอมไพล์ด้วยเวอร์ชันเฉพาะ:

(ในต่อไปนี้ฉันบังคับให้คอมไพล์ด้วยเวอร์ชันที่สูงกว่า)

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

มีการอัปเดตเวอร์ชัน: androidTestCompile 'com.google.code.findbugs: jsr305: 3.0.1'
Insoft

18

จากคู่มือผู้ใช้ Gradle Plugin :

เมื่อเรียกใช้การทดสอบเครื่องมือทั้ง APK หลักและ APK ทดสอบจะใช้ classpath เดียวกัน การสร้าง Gradle จะล้มเหลวหาก APK หลักและ APK ทดสอบใช้ไลบรารีเดียวกัน (เช่น Guava) แต่ในเวอร์ชันที่ต่างกัน หากการไล่ระดับสีไม่เป็นไปตามที่กล่าวมาแอปของคุณอาจทำงานแตกต่างกันในระหว่างการทดสอบและในระหว่างการทำงานปกติ (รวมถึงการหยุดทำงานในกรณีใดกรณีหนึ่ง)

ในการทำให้การสร้างสำเร็จให้แน่ใจว่า APK ทั้งสองใช้เวอร์ชันเดียวกัน หากข้อผิดพลาดเกี่ยวกับการพึ่งพาทางอ้อม (ไลบรารีที่คุณไม่ได้กล่าวถึงใน build.gradle ของคุณ) เพียงเพิ่มการพึ่งพาสำหรับเวอร์ชันที่ใหม่กว่าลงในการกำหนดค่า

เพิ่มบรรทัดนี้ในการสร้างbuild.gradleของคุณเพื่อใช้เวอร์ชันใหม่สำหรับ APK ทั้งสอง:

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

สำหรับการอ้างอิงในอนาคตคุณสามารถตรวจสอบGradle Consoleของคุณและมันจะให้ลิงค์ที่เป็นประโยชน์ถัดจากข้อผิดพลาดเพื่อช่วยแก้ไขข้อผิดพลาดการสร้าง gradle


8

เหตุผลที่สิ่งนี้เกิดขึ้นก็คือการพึ่งพา diff ใช้ lib รุ่น diff เดียวกัน
ดังนั้นจึงมี 3 ขั้นตอนหรือ (1 ขั้นตอน) เพื่อแก้ไขปัญหานี้

1

เพิ่ม

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

ไปยังbuild.gradleไฟล์ของคุณในandroid {...}

ครั้งที่ 2

เปิดเทอร์มินัลในการ
ใช้งานสตูดิโอ Android./gradlew -q app:dependenciesคำสั่ง

3

คลิกClean Projectจากแถบเมนูของ android studio ในBuildรายการ
มันจะสร้างโครงการแล้ว removeรหัสในขั้นตอนที่ 1

บางทีคุณอาจต้องการเพียงแค่ขั้นตอนที่ 2 ฉันไม่สามารถย้อนกลับเมื่อเกิดข้อผิดพลาด ลองดูสิ.


7

เมื่อฉันเพิ่มmodule: 'jsr305'เป็นคำสั่งแยกเพิ่มเติมมันทำงานได้ดีสำหรับฉัน

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

})


6

ปัญหาดังที่ระบุไว้ในบันทึกของคุณคือการอ้างอิง 2 รายการที่พยายามใช้การอ้างอิงที่ 3 เวอร์ชันที่แตกต่างกัน เพิ่มหนึ่งในไฟล์ต่อไปนี้ลงในไฟล์ app-gradle:

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

4
  1. คำตอบที่ได้รับการยอมรับเป็นวิธีหนึ่งในการแก้ไขปัญหาเพราะมันจะใช้กลยุทธ์บางอย่างสำหรับการพึ่งพาที่เป็นปัญหา (com.google.code.findbugs: jsr305) และมันจะแก้ปัญหารอบโครงการโดยใช้การพึ่งพานี้บางรุ่น โดยพื้นฐานแล้วมันจะจัดเรียงเวอร์ชันของไลบรารีนี้ภายในโครงการทั้งหมด

  2. มีคำตอบจาก @Santhosh (และอีกสองคน) ที่แนะนำให้ยกเว้นการพึ่งพาเอสเพรสโซที่เหมือนกันซึ่งควรทำงานในลักษณะเดียวกัน แต่ถ้าโครงการมีการพึ่งพาอื่น ๆ ที่ขึ้นอยู่กับห้องสมุดเดียวกัน (com.google .code.findbugs: jsr305) อีกครั้งเราจะมีปัญหาเดียวกัน ดังนั้นเพื่อที่จะใช้วิธีนี้คุณจะต้องยกเว้นกลุ่มเดียวกันจากการอ้างอิงโครงการทั้งหมดที่ขึ้นอยู่กับ com.google.code.findbugs: jsr305 ฉันเองพบว่า Espresso Contrib และ Espresso Intents ใช้ com.google.code.findbugs: jsr305 ด้วย

ฉันหวังว่าความคิดนี้จะช่วยให้ใครบางคนตระหนักถึงสิ่งที่เกิดขึ้นตรงนี้และสิ่งต่าง ๆ ทำงานอย่างไร (ไม่ใช่แค่คัดลอกวางโค้ด) :)


3

เพิ่มสิ่งนี้เพื่อการอ้างอิงเพื่อบังคับใช้ไลบรารี findbugs เวอร์ชันล่าสุด:

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

2

ลบการพึ่งพาเอสเพรสโซในไฟล์ gradle ที่เหมาะกับฉัน

ลบบรรทัดเหล่านั้นในไฟล์ gradle ของแอป:

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

3
หากคุณเพิ่งลบการพึ่งพาเอสเพรสโซ่คุณจะไม่สามารถทดสอบแอปของคุณได้อีกต่อไปดังนั้นวิธีนี้จะไม่ทำงานอย่างชัดเจน
เฮ็น

1

ผู้ที่จะได้รับข้อผิดพลาดเดียวกันใน Android 3.0.1 สามารถแก้ปัญหาได้โดยเพียงแค่การปรับปรุงรุ่นของ compileSdkVersionและ targetSdkVersion ถึง 27และยังใช้ com.android.support:appcompat-v7:27.1.1 ในการอ้างอิง


1

ในโครงการ ': แอป' คุณสามารถเพิ่มสิ่งต่อไปนี้ลงในไฟล์แอพ / build.gradle ของคุณ:

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

1

สำหรับreact-native-firebaseการเพิ่มส่วนนี้ไปยังapp/build.gradleส่วนอ้างอิงทำให้มันทำงานได้สำหรับฉัน:

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}

นี่เป็นครั้งแรกที่ฉันเห็นธง {force = true} ฉันลองแล้วมันก็ใช้ได้ทันทีสำหรับฉัน ฉันต้องการเก็บ androidx.appcompat ไว้ที่ v1.0.2 สำหรับโปรเจคของฉันเพราะไลบรารี่ที่ฉันเพิ่มมีการพึ่งพานั้นตั้งไว้ที่ v1.1.0
MikeOscarEcho

0

ฉันพยายามใช้ airbnb ส่ง deeplink และได้รับข้อผิดพลาดนี้ ฉันต้องแยกกลุ่ม findbugs ออกจาก 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

ปฏิกิริยาตอบสนอง

หากคุณกำลังมองหาวิธีการแก้ปัญหาพื้นเมืองตอบสนองแล้วเขียนตัวอย่างนี้ในไฟล์ build_levelle node_modules gradle ที่ได้รับผลกระทบเช่น firebase ในกรณีของฉัน

android {
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.0'
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.