ormlite-android icon indicating copy to clipboard operation
ormlite-android copied to clipboard

Duplicate classes and files when depending on a project using ormlite-core

Open aberaud opened this issue 3 years ago • 7 comments

Our Android project uses ormlite-android and depends on another project that uses ormlite-core.

The base dependency includes ormlite with: implementation ("com.j256.ormlite:ormlite-core:6.1")

And the Android project includes ormlite with: implementation ("com.j256.ormlite:ormlite-android:6.1")

When building the Android project, we get the following errors:

> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
   > Duplicate class com.j256.ormlite.dao.BaseDaoImpl found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$1 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$2 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$3 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$4 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$5 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseDaoImpl$6 found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.BaseForeignCollection found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableIterable found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableIterator found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableSpliterator found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableSpliteratorImpl found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableWrappedIterable found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
     Duplicate class com.j256.ormlite.dao.CloseableWrappedIterableImpl found in modules ormlite-android-6.1 (com.j256.ormlite:ormlite-android:6.1) and ormlite-core-6.1 (com.j256.ormlite:ormlite-core:6.1)
(...)
com.android.builder.merge.DuplicateRelativeFileException: 2 files found with path 'com/j256/ormlite/core/LICENSE.txt'.

This was working fine with Ormlite 5.x

aberaud avatar Sep 08 '22 19:09 aberaud

See the ChangeLog: https://raw.githubusercontent.com/j256/ormlite-core/master/src/main/javadoc/doc-files/changelog.txt

In 6.0 we migrated all of the core classes into the JDBC and Android versions:

* JDBC: ormlite-jdbc jar now includes the -core classes.  No need to import ormlite-core jar anymore.
* ANDROID: ormlite-android jar now includes the -core classes.  No need to import ormlite-core jar anymore.

j256 avatar Sep 08 '22 23:09 j256

Thanks for the reply, however the dependency is not an Android dependency but a pure Java/kotlin dependency, so it can't/shouldn't use the Android package.

What to do in that case ? Thanks.

aberaud avatar Sep 09 '22 11:09 aberaud

@j256 Any idea? This issue prevents us from migrating to ORMLite 6.x

Why not declaring a dependency from ormlite-android to ormlite-core, instead of including all ormlite-core classes in ormlite-android, which seems odd?

aberaud avatar Sep 12 '22 17:09 aberaud

Frankly I didn't foresee this issue. I never thought that someone would ever want to depend on both of them. Not everyone uses maven or gradle or some other dependency management system that would automatically pull in jars so it was an attempt to make it easier for folks.

Maybe I should consider rolling that back even though it is going to be painful.

j256 avatar Oct 04 '22 19:10 j256

How to solve it?

HosseinKurd avatar Jun 23 '23 15:06 HosseinKurd

You just have to exclude the duplicated libraries in gradle like so:

implementation('org.osmdroid:osmdroid-geopackage:6.1.x') {
        exclude group: 'org.osmdroid.gpkg'
        exclude module: 'ormlite-core'
        exclude group: 'com.j256.ormlite'
    }

jamalnay avatar Feb 29 '24 18:02 jamalnay