2013-08-04 4 views
5

sto usando Android 0.2.3 in studio con Gradle 0.5 e ha aggiunto la dipendenza ormlite al file build.gradle come segue:"già aggiunto" eccezione con ormlite e Gradle

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

Gradle scaricati due file jar: ormlite-android.jar e ormlite-core.jar. Il problema è che i file jar contengono classi con nomi identici. In modo da ottenere la seguente eccezione ben noto:

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

qualche altra soluzione per lo stesso problema con Maven exists, suggerendo di escludere il ormlite-core.jar. Questo dovrebbe funzionare se tutte le classi da ormlite-core.jar sono incluse in ormlite-android.jar - Non ho controllato questo btw. In tal caso, non capisco perché il pacchetto ormlite-core sia presente in questo pacchetto di versioni Android di ormlite ... Aggiungo esplicitamente ormlite-android, come puoi vedere nello snippet qui sopra.

Ma come escludere ormlite-core.jar in gradle. Tutto quello che ho trovato è stato per il gradle 1.6, ma Android Studio utilizza Gradle 0.5 - o questa è solo la versione del wrapper Android Gradle?

.: MODIFICA :. Per rendere più chiare le dipendenze, aggiungo il mio file 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 
    } 
} 

Perché credo che ci siano stesse classi nelle due librerie ormlite? ==> Guarda lo screenshot. I pacchetti aperti non sono identici? Anche la fonte è. Le uniche classi distinte che ho trovato erano SqliteAndroidDatabaseType e quelle nel pacchetto com.j256.ormlite.android. Aren't the opened packages identical?

+0

Non so quale sia il problema ma ormlite-android non _non_ include la roba -core nel caso ci sia qualche domanda. I documenti sono chiari su questo: http://ormlite.com/docs/getting-started – Gray

+0

Ho studiato già i documenti. – cybergen

risposta

13

Il barattolo di ormlite-android che stai utilizzando è decisamente sbagliato. La mia ipotesi è che qualcuno lo abbia compilato in modo errato con ormlite-core esportato, motivo per cui si verificano conflitti di fusione. Se si look at the source for ormlite-android, non si suppone che la maggior parte di questi pacchetti/classi sia inclusa.

Non sono sicuro di come funziona la versione di ormlite-android, ma sembra che 4.46 sia la versione più recente (aggiornata al 29 luglio 2013), non la versione 4.9 (aggiornata al 26 gennaio 2011). Mi consiglia di utilizzare 4.46 invece (che è ciò che funziona per me) con:

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

Ho pulito molte volte, senza successo. Ho modificato la mia domanda per chiarire le cose. – cybergen

1

Grazie alla @cproinger la risposta in another related question.

WOW, ora funziona! Ho frainteso la versione (colpa mia). Ma comunque, la versione più recente (4.46) contiene solo le classi specifiche di Android nel ormlite-android.jar e tutto il resto nello ormlite-core.jar. Fantastico, grazie @cproinger!

+0

Ah, 6 minuti troppo lenti. Sono felice che tu abbia trovato la risposta! – Greg