“已添加”ormlite和gradle的例外情况

时间:2013-08-04 22:24:53

标签: android exception gradle android-studio ormlite

我正在使用android studio 0.2.3 with gradle 0.5并将ormlite依赖项添加到build.gradle文件中,如下所示:

compile 'com.j256.ormlite:ormlite-android:4.9'

Gradle下载了两个jar文件:ormlite-android.jarormlite-core.jar。问题是,jar文件包含同名的类。所以我得到以下众所周知的例外:

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lcom/j256/ormlite/dao/BaseDaoImpl$1;

针对maven exists同样问题的其他一些解决方案,建议排除ormlite-core.jar。如果ormlite-core.jar中的所有类都包含在ormlite-android.jar中,那么这应该有效 - 我没有检查这个顺便说一句。在这种情况下,我不明白为什么ormlite-core在这个ormlite android依赖包中......我明确地添加了ormlite-android,正如你在上面的代码片段中看到的那样。

但是如何在gradle中排除ormlite-core.jar。我发现的一切都是用于gradle 1.6,但android studio使用gradle 0.5 - 或者这只是android gradle包装器的版本?

.: EDIT :. 为了使依赖关系更加清晰,我添加了build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.android.support:appcompat-v7:18.0.+'
    compile 'com.google.android.gms:play-services:3.1.+'
    compile 'com.j256.ormlite:ormlite-android:4.9'
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }
}

为什么我认为两个ormlite库中有相同的类? ==>查看截图。 打开的包装不一样吗?即使是来源也是。我找到的唯一不同的类是SqliteAndroidDatabaseTypecom.j256.ormlite.android包中的类。 Aren't the opened packages identical?

2 个答案:

答案 0 :(得分:13)

你正在使用的ormlite-android jar肯定是错的。我的猜测是有人用ormlite-core导出错误地构建它,这就是你得到合并冲突的原因。如果您look at the source for ormlite-android,则不应包含大部分包/类。

我不确定ormlite-android版本是如何工作的,但看起来4.46是实际的最新版本(2013年7月29日更新),而不是4.9(2011年1月26日更新)。我建议使用4.46代替(这对我有用):

'com.j256.ormlite:ormlite-android:4.46'

答案 1 :(得分:1)

感谢@cproinger在another related question中的答案。

哇,现在它有效!我误解了版本控制(我的错)。但无论如何,较新版本(4.46)仅包含ormlite-android.jar中的特定于Android的类以及ormlite-core.jar中的所有其他类。太棒了,谢谢@cproinger!