Kotlin, Java, multidex, Dagger 2, Butterknife y Realm: transformClassesWithJarMergingForDebug: input duplicada: org / jetbrains / annotations / NotNull.class

Tenemos un código de Java Java existente. Queremos comenzar lentamente a mudarnos lentamente a Kotlin. Usamos Dagger 2, Butterknife y Realm. Usamos el comstackdor Java 8 (pero nuestra targetCompatibility y la sourceCompatibility son 1.7).

Estuve vagando por la web durante horas, vi conversaciones SO, GitHub y demás, y logré resolver todos los problemas excepto uno:

La construcción es exitosa, pero cuando intentamos depurar, obtenemos:

 Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/jetbrains/annotations/NotNull.class 

¿Hay alguna manera de resolver inputs duplicadas en Gradle (tal vez usando packagingOptions o resolutionStrategy ?, ya que es una duplicación que proviene de los complementos …?)?

De nuevo, el build project ejecuta sin ningún error, ¡solo se transformClassesWithJarMergingForDebug error al transformClassesWithJarMergingForDebug !

Aquí está el gradle de la aplicación:

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' //apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'realm-android' kapt { generateStubs = true } android { signingConfigs { config { keyAlias 'MyAndroidKey' keyPassword 'password' storeFile file('android.jks') storePassword 'password' } } compileSdkVersion 23 buildToolsVersion '23.0.3' defaultConfig { vectorDrawables.useSupportLibrary = true applicationId "com.acme.app" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" //testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "com.acme.app.utils.CustomAndroidJUnitRunner" // http://stackoverflow.com/a/26515860/587467: multiDexEnabled true } //dexOptions { incremental false } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config } } packagingOptions { exclude 'META-INF/services/javax.annotation.processing.Processor' exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/license.txt' exclude 'META-INF/LGPL2.1' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/notice.txt' } configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:23.3.0', 'junit:junit:4.12' } targetCompatibility = 1.7 sourceCompatibility = 1.7 compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { // http://stackoverflow.com/a/26515860/587467: compile 'com.android.support:multidex:1.0.1' compile fileTree(include: ['*.jar'], dir: 'libs') /// <Firebase> Cloud Messaging (FCM) - the Google Cloud Messaging (GCM) new version: compile 'com.google.firebase:firebase-messaging:9.0.2' /// </Firebase> /// <Dagger> //provided 'javax.annotation:jsr250-api:1.0' //apt 'com.google.dagger:dagger-compiler:2.5' //compile 'com.google.dagger:dagger:2.5' //compile 'com.google.dagger:dagger-compiler:2.4' /// </Dagger> /// <KotlinDagger> compile 'com.google.dagger:dagger:2.5' kapt 'com.google.dagger:dagger-compiler:2.5' kaptTest 'com.google.dagger:dagger-compiler:2.5' kaptAndroidTest 'com.google.dagger:dagger-compiler:2.5' //provided 'org.glassfish:javax.annotation:10.0-b28' /// </KotlinDagger> /// <JSON> //testCompile 'javax.json:javax.json-api:1.0' testCompile 'org.glassfish:javax.json:1.0.4' // https://github.com/FasterXML/jackson-docs/wiki/Using-Jackson2-with-Maven // http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/ //testCompile 'com.fasterxml.jackson.core:jackson-core:2.6.3' testCompile 'com.fasterxml.jackson.core:jackson-databind:2.7.4' /// </JSON> //apt 'com.jakewharton:butterknife-compiler:8.0.1' kapt 'com.jakewharton:butterknife-compiler:8.0.1' testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'net.java.dev.jna:jna-platform:4.2.2' // <InstrumentedTests> // <MutualExclusive> // <Or> //androidTestCompile 'com.android.support.test:testing-support-lib:0.1' // </Or> // <Or> // androidTestCompile 'com.android.support:support-annotations:23.0.0' androidTestCompile 'com.android.support.test:runner:0.4' //androidTestCompile 'com.android.support.test:rules:0.4' // <Espresso> androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' // </Espresso> //androidTestCompile "org.robolectric:robolectric:3.0" // </Or> // </MutualExclusive> // </InstrumentedTests> compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:support-v13:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.jakewharton:butterknife:8.0.1' compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1' compile 'org.springframework.android:spring-android-rest-template:2.0.0.M3' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'com.android.support:support-v4:23.3.0' compile 'com.android.support:recyclerview-v7:23.3.0' compile 'com.android.support:cardview-v7:23.3.0' compile 'io.reactivex:rxandroid:1.2.1' compile 'joda-time:joda-time:2.9.4' //compile 'io.reactivex:rxjava:1.1.6' compile 'io.reactivex:rxjava-async-util:0.21.0' //<Floating Buttons> compile 'com.github.clans:fab:1.6.4' //</Floating Buttons> compile 'com.facebook.fresco:fresco:0.11.0' compile 'org.jetbrains:annotations-java5:15.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.7.4' compile 'com.google.code.gson:gson:2.4' compile 'javax.annotation:javax.annotation-api:1.2' compile "org.jetbrains.kotlin:kotlin-stdlib:1.0.3" } // https://firebase.google.com/docs/android/setup#add_the_sdk // Firebase Cloud Messaging (FCM) - the Google Cloud Messaging (GCM) new version: apply plugin: 'com.google.gms.google-services' repositories { mavenCentral() } 

Intente eliminar: compile 'org.jetbrains:annotations-java5:15.0' . Si no funciona, sigue estos pasos:

Vaya a su file de app/build.gradle y agregue:

 configurations { cleanedAnnotations compile.exclude group: 'org.jetbrains' , module:'annotations' } 

Cambio

 compile 'org.jetbrains:annotations-java5:15.0' 

con

  compile files("${buildDir}/libs/annotations-cleaned.jar") { builtBy 'cleanAnnotationsJar' } cleanedAnnotations 'org.jetbrains:nnotations-java5:15.0' 

Finalmente agregue:

 task cleanAnnotationsJar(type:Jar) { configurations.cleanedAnnotations.each { f -> from zipTree(f) } archiveName = "annotations-cleaned.jar" exclude 'org/jetbrains/annotations/NotNull.class' exclude 'org/jetbrains/annotations/Nullable.class' } 

Compruebe: https://discuss.kotlinlang.org/t/duplicate-classes-in-kotlin-runtime-and-com-intellij-annotations/154/3

Cambio la compile ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") para compile ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") { exclude group: 'org.jetbrains', module: 'annotations' } , funciona. ¡inténtalo!

  • Comience un proyecto con la ayuda de Kotlin en Android
  • Hacer reference a las vistas con la misma identificación en diferentes layouts con extensiones de android kotlin
  • Comunicación de extensión Kotlin-android entre classs similar a la comunicación con otros fragments
  • ¿Qué versión (s) de Kotlin debería usar para Android Studio 3.0 Canary 1?
  • Problemas al intentar generar la aplicación Kotlin con Android Studio
  • Llamadas seguras en Kotlin con Array es confuso
  • Tipo de interferencia fallida. No coinciden los types esperados: requiere un par de cadenas encontrado <String, String> en Kotlin y Anko
  • Extensiones en Kotlin
  • Kotlin DialogFragment editText editable always null
  • Kotlin RC NoClassDefFoundError
  • La diferencia entre !! y? en Kotlin