Область поддерживает maven или имеет jar с его последним исходным кодом

#android #maven #realm #realm-migration

#Android #maven #realm #realm-миграция

Вопрос:

У меня здесь немного странный вариант использования, мой проект разделен на 2 модуля: один — серверный проект, а другой — Android-приложение, теперь они оба используют одни и те же классы моделей. Серверный проект с использованием maven build tool в eclipse и android-приложение с использованием gradle в Android studio.

Похоже, что в realm нет артефакта maven, а также не найден файл jar последней версии.

Пожалуйста, помогите мне разобраться в немного странном случае.

Комментарии:

1. В настоящее время maven не поддерживается. Соответствующая проблема github.com/realm/realm-java/issues/2342

2. Поддерживается только Gradle, потому что Realm использует Transform API.

Ответ №1:

Вам нужно внести какой-то хак в модель для совместного использования между Android и общим серверным проектом.

Вы можете создавать фиктивные классы realm для своего сервера, которые могут исключаться с помощью gradle, и вам нужно создать тот же самый точный класс в том же самом пакете. Классы для сервера:

 package io.realm;
import java.util.ArrayList;

public class RealmObject extends ArrayList
{

}

package io.realm;
import java.util.ArrayList;

public class RealmList<E> extends ArrayList
{

}
  

Общий проект gradle должен игнорировать фиктивный класс и может использовать класс realm:

 buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath "io.realm:realm-gradle-plugin:2.0.2"
    }
}

repositories {
    mavenCentral()
    jcenter()
}

apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    publishNonDefault true

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 24
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java {
                srcDirs 'src'
                //Exclude server (fake) Realm dependent files to avoid conflicts with Realm framework
                exclude '**/Ignore.java'
                exclude '**/RealmObject.java'
                exclude '**/RealmList.java'
                exclude '**/PrimaryKey.java'
            }
            res.srcDirs = ['res']
            aidl.srcDirs = ['aidl']
        }
    }

    lintOptions {
        abortOnError false
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }
}
  

ПРИМЕЧАНИЕ: сервер по-прежнему не поддерживает realm. мы просто настраиваем поддержку Android и сервера для работы.

Окончательная модель:

 import io.realm.RealmList;
import io.realm.RealmObject;

public class MyModel extends RealmObject