22
votes

Comment résoudre les problèmes de dépendance de gradle dupliqués

J'ai essayé de tester mon code avec robolectric. Le problème est qu'il a des références dupliquées. par exemple

apply plugin: 'idea'

idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}
android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    useLibrary 'org.apache.http.legacy'
    useLibrary 'android.test.runner'

    useLibrary 'android.test.base'
    useLibrary 'android.test.mock'

    defaultConfig {
        applicationId "com.example.sampleapp"
        minSdkVersion 16
        targetSdkVersion 28
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    testOptions {
        unitTests {
            includeAndroidResources = true
        }
    }
}

dependencies {
    androidTestImplementation 'androidx.test:rules:1.2.0'
    androidTestImplementation 'androidx.test:core:1.2.1-alpha02'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    androidTestImplementation 'org.robolectric:robolectric:4.3'

    // Mail-Versand
    implementation 'com.sun.mail:android-mail:1.6.2'
    implementation 'com.sun.mail:android-activation:1.6.2'

    implementation 'androidx.appcompat:appcompat:1.0.2'//
    implementation 'com.github.woxthebox:draglistview:1.6.6'
}

J'ai utilisé l'application d'artefact gradel app:dependencies pour obtenir le rapport suivant. Voici les parties importantes:

+--- org.robolectric:robolectric:4.3
|    +--- org.robolectric:annotations:4.3
|    +--- org.robolectric:junit:4.3
|    |    +--- org.robolectric:annotations:4.3
|    |    +--- org.robolectric:sandbox:4.3
|    |    |    +--- org.robolectric:annotations:4.3
|    |    |    +--- org.robolectric:utils:4.3
|    |    |    |    +--- org.robolectric:annotations:4.3
|    |    |    |    +--- org.robolectric:pluginapi:4.3
|    |    |    |    |    +--- org.robolectric:annotations:4.3
|    |    |    |    |    +--- org.apache.ant:ant:1.8.0
|    |    |    |    |    |    \--- org.apache.ant:ant-launcher:1.8.0
|    |    |    |    |    \--- org.apache.maven:maven-ant-tasks:2.1.3
|    |    |    |    |         +--- org.apache.ant:ant:1.8.0 (*)
|    |    |    |    |         +--- classworlds:classworlds:1.1-alpha-2
|    |    |    |    |         +--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1
|    |    |    |    |         |    +--- org.codehaus.plexus:plexus-utils:1.0.4 -> 1.5.15
|    |    |    |    |         |    \--- classworlds:classworlds:1.1-alpha-2
|    |    |    |    |         +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         +--- org.codehaus.plexus:plexus-interpolation:1.11
|    |    |    |    |         +--- org.apache.maven:maven-artifact:2.2.1
|    |    |    |    |         |    \--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         +--- org.apache.maven:maven-artifact-manager:2.2.1
|    |    |    |    |         |    +--- org.apache.maven:maven-repository-metadata:2.2.1
|    |    |    |    |         |    |    \--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    +--- org.apache.maven:maven-artifact:2.2.1 (*)
|    |    |    |    |         |    +--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         |    +--- org.apache.maven.wagon:wagon-provider-api:1.0-beta-6
|    |    |    |    |         |    |    \--- org.codehaus.plexus:plexus-utils:1.4.2 -> 1.5.15
|    |    |    |    |         |    \--- backport-util-concurrent:backport-util-concurrent:3.1
|    |    |    |    |         +--- org.apache.maven:maven-model:2.2.1
|    |    |    |    |         |    \--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         +--- org.apache.maven:maven-project:2.2.1
|    |    |    |    |         |    +--- org.apache.maven:maven-settings:2.2.1
|    |    |    |    |         |    |    +--- org.apache.maven:maven-model:2.2.1 (*)
|    |    |    |    |         |    |    +--- org.codehaus.plexus:plexus-interpolation:1.11
|    |    |    |    |         |    |    +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    |    \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         |    +--- org.apache.maven:maven-profile:2.2.1
|    |    |    |    |         |    |    +--- org.apache.maven:maven-model:2.2.1 (*)
|    |    |    |    |         |    |    +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    |    +--- org.codehaus.plexus:plexus-interpolation:1.11
|    |    |    |    |         |    |    \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         |    +--- org.apache.maven:maven-model:2.2.1 (*)
|    |    |    |    |         |    +--- org.apache.maven:maven-artifact-manager:2.2.1 (*)
|    |    |    |    |         |    +--- org.apache.maven:maven-plugin-registry:2.2.1
|    |    |    |    |         |    |    +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    |    \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         |    +--- org.codehaus.plexus:plexus-interpolation:1.11
|    |    |    |    |         |    +--- org.codehaus.plexus:plexus-utils:1.5.15
|    |    |    |    |         |    +--- org.apache.maven:maven-artifact:2.2.1 (*)
|    |    |    |    |         |    \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         +--- org.apache.maven:maven-error-diagnostics:2.2.1
|    |    |    |    |         |    \--- org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1 (*)
|    |    |    |    |         +--- org.apache.maven:maven-settings:2.2.1 (*)
|    |    |    |    |         +--- org.apache.maven.wagon:wagon-file:1.0-beta-6
|    |    |    |    |         |    \--- org.apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
|    |    |    |    |         +--- org.apache.maven.wagon:wagon-http-lightweight:1.0-beta-6
|    |    |    |    |         |    +--- org.apache.maven.wagon:wagon-http-shared:1.0-beta-6
|    |    |    |    |         |    |    +--- nekohtml:xercesMinimal:1.9.6.2
|    |    |    |    |         |    |    +--- nekohtml:nekohtml:1.9.6.2
|    |    |    |    |         |    |    \--- org.apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
|    |    |    |    |         |    \--- org.apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
|    |    |    |    |         \--- org.apache.maven.wagon:wagon-provider-api:1.0-beta-6 (*)
|    |    |    |    +--- org.robolectric:utils-reflector:4.3
|    |    |    |    |    +--- org.ow2.asm:asm:7.0
|    |    |    |    |    +--- org.ow2.asm:asm-commons:7.0
|    |    |    |    |    |    +--- org.ow2.asm:asm:7.0
|    |    |    |    |    |    +--- org.ow2.asm:asm-tree:7.0
|    |    |    |    |    |    |    \--- org.ow2.asm:asm:7.0
|    |    |    |    |    |    \--- org.ow2.asm:asm-analysis:7.0
|    |    |    |    |    |         \--- org.ow2.asm:asm-tree:7.0 (*)
|    |    |    |    |    \--- org.ow2.asm:asm-util:7.0
|    |    |    |    |         +--- org.ow2.asm:asm:7.0
|    |    |    |    |         +--- org.ow2.asm:asm-tree:7.0 (*)
|    |    |    |    |         \--- org.ow2.asm:asm-analysis:7.0 (*)
|    |    |    |    +--- com.google.auto.service:auto-service:1.0-rc4
|    |    |    |    |    +--- com.google.auto:auto-common:0.8
|    |    |    |    |    |    \--- com.google.guava:guava:19.0 -> 27.0.1-jre
|    |    |    |    |    |         +--- com.google.guava:failureaccess:1.0.1
|    |    |    |    |    |         +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|    |    |    |    |    |         +--- com.google.code.findbugs:jsr305:3.0.2
|    |    |    |    |    |         +--- org.checkerframework:checker-qual:2.5.2
|    |    |    |    |    |         +--- com.google.errorprone:error_prone_annotations:2.2.0
|    |    |    |    |    |         +--- com.google.j2objc:j2objc-annotations:1.1
|    |    |    |    |    |         \--- org.codehaus.mojo:animal-sniffer-annotations:1.17
|    |    |    |    |    \--- com.google.guava:guava:23.5-jre -> 27.0.1-jre (*)
|    |    |    |    +--- javax.inject:javax.inject:1
|    |    |    |    \--- javax.annotation:javax.annotation-api:1.3.2
|    |    |    +--- org.robolectric:shadowapi:4.3
|    |    |    |    \--- org.robolectric:annotations:4.3
|    |    |    +--- org.robolectric:utils-reflector:4.3 (*)
|    |    |    +--- javax.annotation:javax.annotation-api:1.3.2
|    |    |    +--- javax.inject:javax.inject:1
|    |    |    +--- org.ow2.asm:asm:7.0
|    |    |    +--- org.ow2.asm:asm-commons:7.0 (*)
|    |    |    \--- com.google.guava:guava:27.0.1-jre (*)
|    |    +--- org.robolectric:pluginapi:4.3 (*)
|    |    +--- org.robolectric:shadowapi:4.3 (*)
|    |    \--- org.robolectric:utils-reflector:4.3 (*)
|    +--- org.robolectric:pluginapi:4.3 (*)
|    +--- org.robolectric:resources:4.3
|    |    +--- org.robolectric:utils:4.3 (*)
|    |    +--- org.robolectric:annotations:4.3
|    |    +--- org.robolectric:pluginapi:4.3 (*)
|    |    \--- com.google.guava:guava:27.0.1-jre (*)
|    +--- org.robolectric:sandbox:4.3 (*)
|    +--- org.robolectric:utils:4.3 (*)
|    +--- org.robolectric:utils-reflector:4.3 (*)
|    +--- org.robolectric:plugins-maven-dependency-resolver:4.3
|    |    +--- org.robolectric:pluginapi:4.3 (*)
|    |    +--- org.robolectric:utils:4.3 (*)
|    |    +--- org.apache.ant:ant:1.8.0 (*)
|    |    \--- org.apache.maven:maven-ant-tasks:2.1.3 (*)
|    +--- javax.inject:javax.inject:1
|    +--- javax.annotation:javax.annotation-api:1.3.2
|    +--- org.robolectric:shadows-framework:4.3
|    |    +--- org.robolectric:annotations:4.3
|    |    +--- org.robolectric:resources:4.3 (*)
|    |    +--- org.robolectric:pluginapi:4.3 (*)
|    |    +--- org.robolectric:shadowapi:4.3 (*)
|    |    +--- org.robolectric:utils:4.3 (*)
|    |    +--- org.robolectric:utils-reflector:4.3 (*)
|    |    +--- androidx.test:monitor:1.2.0 -> 1.3.0-alpha02 (*)
|    |    +--- com.almworks.sqlite4java:sqlite4java:0.282
|    |    +--- com.ibm.icu:icu4j:53.1
|    |    +--- com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.1
|    |    |    +--- org.hamcrest:hamcrest-core:1.3
|    |    |    +--- org.hamcrest:hamcrest-library:1.3 (*)
|    |    |    \--- com.google.protobuf:protobuf-java:2.6.1
|    |    \--- androidx.annotation:annotation:1.0.0
|    +--- org.bouncycastle:bcprov-jdk15on:1.52
|    \--- androidx.test:monitor:1.2.0 -> 1.3.0-alpha02 (*)

Comment résoudre l'erreur de référence? Il me semble que robolectric a la même classe dans différentes dépendances?

J'utilise le script de construction suivant: apply plugin: 'com.android.application'

java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class org.apache.maven.artifact.Artifact found in modules maven-ant-tasks-2.1.3.jar (org.apache.maven:maven-ant-tasks:2.1.3) and maven-artifact-2.2.1.jar (org.apache.maven:maven-artifact:2.2.1)

Comment y remédier?

Le problème sur github est ouvert: https://github.com/robolectric/robolectric/issues/5235


0 commentaires

4 Réponses :


25
votes

Enfin, lancez le test. J'ai exclu toutes les bibliothèques avec des classes dupliquées:

testImplementation ("org.robolectric:robolectric:4.3"){
    exclude group: 'org.apache.maven', module: 'maven-artifact'
    exclude group: 'org.apache.maven', module: 'maven-artifact-manager'
    exclude group: 'org.apache.maven', module: 'maven-model'
    exclude group: 'org.apache.maven', module: 'maven-plugin-registry'
    exclude group: 'org.apache.maven', module: 'maven-profile'
    exclude group: 'org.apache.maven', module: 'maven-project'
    exclude group: 'org.apache.maven', module: 'maven-settings'
    exclude group: 'org.apache.maven', module: 'maven-error-diagnostics'
    exclude group: "org.apache.maven.wagon"
}

Toutes les possibilités n'ont pas été testées mais un simple test fonctionnait déjà.


1 commentaires

vous êtes une bouée de sauvetage @ finder2



7
votes

Cela pourrait probablement être écrit de manière plus générale:

testImplementation ("org.robolectric:robolectric:4.3") {
    exclude group: "org.apache.maven", name: "maven-ant-tasks"
}

ou même:

testImplementation ("org.robolectric:robolectric:4.3") {
    exclude group "org.apache.maven.wagon"
    exclude group "org.apache.maven"
}

car ce sont les tâches maven -ant de pluginapi , qui récupèrent les dépendances org.apache.maven .


4 commentaires

Cela ne marche pas. Cela semble génial, mais vous excluez également avec org.apache.maven le groupe maven-ant-tasks. Cela provoque une ClassNotFoundException: org.apache.maven.artifact.ant.DependenciesTask . L'idée d'exclure tout le groupe est géniale. Je l'ai utilisé pour exclure org.apache.maven.wagon


malheureusement, dans mon cas, org.codehaus.classworld que roboelectric 4.3.1 utilisé des doublons, même si j'ai exclu d'utiliser le groupe, il affichera également ClassNotFound @ finder2


@mochadwi si vous postez une nouvelle question, en fournissant des dependencies et en me notifiant son URL, je pourrais probablement résoudre le problème. ClassNotFound ne se produit généralement que lorsque vous en ClassNotFound trop.


Pensez qu'il faut utiliser debugImplementation pour l'un des paquets (il faudrait voir lequel il s'agissait). Ce sont des dependencies pour deux applications complètement différentes; au moins sur Android.



3
votes

J'ai rencontré le même problème et ce qui m'a aidé, c'est que j'avais défini la dépendance Roboelectric deux fois dans le fichier Gradle, l'un avec androidTestImplementation et l'autre avec testImplementation, donc quand j'ai supprimé le problème de la première partie résolu !!!


1 commentaires

vous êtes aussi un homme de sauvetage @ alireza-rahmaty. Je ne sais pas pourquoi j'ai besoin d'ajouter testImplementation pour roboelectric. Cela signifie pour l'instrumentation, qui n'est pas nécessaire pour le répertoire unitTest. merci encore mec



0
votes

La solution pour moi était de m'assurer que je n'avais pas besoin de Robolectric dans mes dépendances androidTestImplementation .

Une fois que j'ai corrigé cela, je n'avais aucun conflit à résoudre.


0 commentaires