2015-04-10 9 views
5

Ho sostituito le classi Date con le classi di recente nella mia app Android. Io uso Jackson per analizzare il numero json. Ho aggiunto le seguenti righe al mio file build.gradleFile duplicati gradli durante l'imballaggio - messaggi.proprietà di JodaTime

compile com.fasterxml.jackson.datatype:jackson-datatype-joda:2.4.3 
compile net.danlew:android.joda:2.7.1 

Ha rotto la mia build. Il messaggio di errore è duplicate files during packaging of APK. Ha anche suggerito la seguente opzione

android { 
    packagingOptions { 
    exclude 'org/joda/time/format/messages_da.properties' 
    } 
} 

Ci sono molti file del genere in JodaTime come "messages_da.properties", "messages_fr.properties". Credo che quelli siano usati per fornire una formattazione basata sulla localizzazione.

La mia impressione dice che questi file non dovrebbero essere esclusi. Se gli esperti là fuori in grado di fornire una soluzione per questo, sarebbe bello

+3

Per quello che vale, puoi anche usare 'pickFirst' invece di 'escludere' per usare il primo che trova. –

+0

Vedere la mia risposta qui sotto, arriva alla radice del problema, lo spiega e mostra una soluzione molto migliore. – Sakiboy

risposta

2

Questo è in realtà un problema che deriva dalla in base a più moduli joda-time nel progetto.

Per risolvere questo problema, si deve escludere qualsiasi “duplicato" joda-time modulo (s) da qualsiasi dipendenza nel progetto che contiene un ‘duplicato’ joda-time modulo.

Per sapere quali dipendenze sono compresi la ‘duplicato’ joda-time, utilizzare il comando ./gradlew app:dependencies per elencare il grafico completo delle dipendenze, quindi esaminare l'elenco delle dipendenze e individuare quelle che includono il modulo "duplicato" joda-time. Quindi escludere joda-time da qualsiasi dipendenza che include un "duplicato" di esso. Dopo aver fatto ciò, la tua app andrà bene.

Esempio di come escludere joda-time da una dipendenza:

// An offending dependency that contains a duplicate joda-time. 
compile('com.some.project:some-module:0.1') { 
     // Exclude joda-time from this dependency to remove the errors. 
     exclude module: 'joda-time' 
    } 

In questo modo non dovrete fare affidamento su altre risposte hacky qui.

3

mia soluzione sporca:

android { 
    packagingOptions { 
     exclude 'META-INF/maven/joda-time/joda-time/pom.properties' 
     exclude 'META-INF/maven/joda-time/joda-time/pom.xml' 
     pickFirst 'org/joda/time/format/messages.properties' 
     pickFirst 'org/joda/time/format/messages_cs.properties' 
     pickFirst 'org/joda/time/format/messages_da.properties' 
     pickFirst 'org/joda/time/format/messages_de.properties' 
     pickFirst 'org/joda/time/format/messages_en.properties' 
     pickFirst 'org/joda/time/format/messages_es.properties' 
     pickFirst 'org/joda/time/format/messages_fr.properties' 
     pickFirst 'org/joda/time/format/messages_it.properties' 
     pickFirst 'org/joda/time/format/messages_ja.properties' 
     pickFirst 'org/joda/time/format/messages_no.properties' 
     pickFirst 'org/joda/time/format/messages_nl.properties' 
     pickFirst 'org/joda/time/format/messages_pl.properties' 
     pickFirst 'org/joda/time/format/messages_pt.properties' 
     pickFirst 'org/joda/time/format/messages_ru.properties' 
     pickFirst 'org/joda/time/format/messages_tr.properties' 
    } 
} 
2

ho risolto questo problema come

android { 
    packagingOptions { 
     exclude 'org/joda/time/format/*.properties' 
    } 
} 
Problemi correlati