【问题标题】:Duplicate Entry Error - Dependancy and Project Module Confliction - Android重复输入错误 - 依赖项和项目模块冲突 - Android
【发布时间】:2016-03-26 13:38:26
【问题描述】:

首先。以下是我得到的错误。

现在,我正在做的事情如下......

我正在集成 IBM 的 Speech To Text 服务。我创建了一个demo HERE!

我还在使用 IBM 的另外两项服务,分别名为 Personality InsightsCloudant Database

我已经成功集成了 Speech To Text 示例。但是当我集成 Personality InsightsCloudant 数据库 时,它给了我上述错误。

我确认的内容:

  • 在 STT 演示中有一个名为 speech-android-wrapper 的模块。
  • 我已将其包含在我的应用程序中,并在 *build.gradle** 文件中添加了一行,例如 compile project(':speech-android-wrapper')
  • 对于 Cloudant Database 服务,我有 compile group: 'com.cloudant', name: 'cloudant-sync-datastore-android', version: 'latest.release' 之类的依赖项。
  • 当我评论 Cloudant 数据库 依赖项时。它不会给我以上错误。
  • 所以,这两个依赖项在某些地方发生冲突。

下面是我的应用程序的 build.gradle 文件。

build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    packagingOptions {
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/LICENSE.txt'
    }

    defaultConfig {
        multiDexEnabled true
        applicationId "com.stt_int.android01.sttdemofour"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

repositories {
    // ... other project repositories
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile project(':speech-android-wrapper')
    compile 'com.facebook.android:facebook-android-sdk:4.7.+'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    /*compile('com.mopub:mopub-sdk:4.3.0@aar') {
        transitive = true
    }*/
    compile('com.twitter.sdk.android:twitter:1.13.0@aar') {
        transitive = true;
    }
    compile 'com.ibm.watson.developer_cloud:java-sdk:2.6.0'
    compile group: 'com.cloudant', name: 'cloudant-sync-datastore-android', version: 'latest.release'
}

下面是speech-android-wrapper模块的build.gradle文件

apply plugin: 'com.android.library'

android {
    compileSdkVersion 21
    buildToolsVersion '22.0.1'
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 16
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile files('libs/java_websocket.jar')
    compile files('libs/commons-io-2.4.jar')
    compile files('libs/jna.jar')
}

我尝试使用以下代码排除 ByteOrderMark.class 类,但我无法获得期望的结果。

android { packagingOptions { exclude 'org/apache/commons/io/ByteOrderMark.class' } }

任何帮助都将非常非常非常感激。谢谢!!

更新 1:日期:28.03.2016

我尝试了 @Nikolay Shmyrev 建议的两个链接,但没有一个链接适合我。

来自第一个链接。
dependencies { compile files('libs/java_websocket.jar') //compile files('libs/commons-io-2.4.jar') compile('commons-io:commons-io:2.4') { exclude group: 'org.apache', module: 'commons-io' } compile files('libs/jna.jar') }

来自第二个链接。
dependencies { compile files('libs/java_websocket.jar') //compile files('libs/commons-io-2.4.jar') compile('commons-io:commons-io:2.4') { exclude group: 'org.apache.commons.io' } compile files('libs/jna.jar') }
我已经从 speech-android-wrapper 模块的 libs 文件夹中删除了 commons-io-2.4.jar 文件。

更新 2:日期:29.03.2016

下面我也试过了。

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile project(':speech-android-wrapper') compile 'com.facebook.android:facebook-android-sdk:4.7.+' compile 'com.mcxiaoke.volley:library:1.0.19' /*compile('com.mopub:mopub-sdk:4.3.0@aar') { transitive = true }*/ compile('com.twitter.sdk.android:twitter:1.13.0@aar') { transitive = true; } compile 'com.ibm.watson.developer_cloud:java-sdk:2.6.0' compile(group: 'com.cloudant', name: 'cloudant-sync-datastore-android', version: 'latest.release') { exclude group: 'org.apache', module: 'commons-io' } }

下面还有..

dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.0' compile project(':speech-android-wrapper') compile 'com.facebook.android:facebook-android-sdk:4.7.+' compile 'com.mcxiaoke.volley:library:1.0.19' /*compile('com.mopub:mopub-sdk:4.3.0@aar') { transitive = true }*/ compile('com.twitter.sdk.android:twitter:1.13.0@aar') { transitive = true; } compile 'com.ibm.watson.developer_cloud:java-sdk:2.6.0' compile(group: 'com.cloudant', name: 'cloudant-sync-datastore-android', version: 'latest.release') { exclude group: 'org.apache.commons.io' } }

到我项目的 build.gradle 文件。虽然我更改了项目的 build.gradle 文件,但 speech-android-wrapper 的 build.gradle 文件如下所示。

dependencies { compile files('libs/java_websocket.jar') //compile files('libs/commons-io-2.4.jar') compile 'commons-io:commons-io:2.4' compile files('libs/jna.jar') }

但对我没有任何作用。

【问题讨论】:

标签: android-gradle-plugin build.gradle speech-to-text cloudant


【解决方案1】:

我不确定它是否可以工作。

出现问题是因为您添加了同一个类 (org/apache/commons/io/ByteOrderMark.class) 两次

如果你检查 com.cloudant:cloudant-sync-datastore-android 库的 pom 文件,你会发现这个依赖:

commons-io:commons-io:2.4

在您的 Speech-android-wrapper 模块中,您可以:

  • 从 libs 文件夹中删除 commons-io-2.4.jar
  • 更改 build.gradle 中的依赖关系,删除行 compile files('libs/commons-io-2.4.jar') 并添加 compile commons-io:commons-io:2.4

【讨论】:

  • 不适合我。感谢您的回答。@Gabriele Mariotti
【解决方案2】:

我找到了解决方案,因为可以排除某些组我的下一行。

configurations { all*.exclude group: 'commons-io' }

我上面添加的那行错误消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2015-02-28
    • 2020-09-03
    • 1970-01-01
    相关资源
    最近更新 更多