【问题标题】:Realm not generating RealmProxy classes in Java/Kotlin project when using kapt使用 kapt 时,Realm 未在 Java/Kotlin 项目中生成 RealmProxy 类
【发布时间】:2017-07-26 14:26:56
【问题描述】:

我正在尝试将领域集成到 Java/Kotlin 项目中,但 kapt 甚至不会为 .java 文件生成 RealmProxy 类

由于this,我已经更新了领域,但仍然无法正常工作

Gradle 应用文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-android'

repositories {
    maven {
        url 'https://maven.fabric.io/public'
    }
}

kapt {
    generateStubs = true
}

project.ext {
    daggerVersion = '2.2'
}

dependencies {

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    kapt "com.android.databinding:compiler:2.3.3"

    annotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    compile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
    kapt "com.google.dagger:dagger-compiler:${daggerVersion}"
    provided group: 'org.glassfish', name: 'javax.annotation', version: '10.0-b28'
    testAnnotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    testCompile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
    androidTestAnnotationProcessor group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    androidTestCompile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
}
...

项目文件:

buildscript {
    ext.kotlin_version = '1.1.3-2'

    repositories {
        jcenter()

        maven {
            url 'https://maven.fabric.io/public'
        }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.realm:realm-gradle-plugin:3.5.0"
    }
}
...

Java 模型文件:

@RealmClass
public class NotificationEventsModel extends RealmObject {

    @PrimaryKey
    private long classPK;

    @SerializedName("userNotificationEventsCount")
    private int eventsCount;

}

Kotlin 模型文件:

@RealmClass open class PageModel(

    open var classPK: Long = 0,
    open var content: String? = null,
    @PrimaryKey
    open var id: Long = 0,

) : RealmObject() {

}

【问题讨论】:

    标签: java android kotlin apt kapt


    【解决方案1】:

    我通过将 realm-android 插件声明为插件列表中的最后一个以及从 annotationProcessor 切换到 Kapt 来解决问题,如下所示:

    apply plugin: 'me.tatarka.retrolambda'
    apply plugin: 'realm-android'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-kapt'
    apply plugin: 'realm-android'
    
    kapt 'com.android.databinding:compiler:2.3.3'
    compile group: 'com.google.dagger', name: 'dagger', version: "${daggerVersion}"
    kapt group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    kaptTest group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    kaptAndroidTest group: 'com.google.dagger', name: 'dagger-compiler', version: "${daggerVersion}"
    

    【讨论】:

    • 就像备注一样,在 AS 3.x 中,您不必再使用 retrolambda
    【解决方案2】:

    我相信你应该要么扩展RealmObject

    open class PageModel(...) : RealmObject()
    

    use the @RealmClass annotation and implement RealmModel:

    @RealmClass 
    open class PageModel(...) : RealmModel
    

    也许与子类化一起使用的注释是 Realm 的绊脚石。

    【讨论】:

    【解决方案3】:

    kotlin-kapt 插件指示 gradle 使用 kapt3。也许这是相关的,Realm 插件有问题?不应该是这样,因为来自this question 似乎正在工作,但也适用于旧版本的插件(这使得它更加奇怪)。

    【讨论】:

      【解决方案4】:

      //构建gradle(app)

      应用插件:'com.android.application' 应用插件:'kotlin-kapt'

      应用插件:'kotlin-android' 应用插件:'realm-android' 应用插件:'kotlin-android-extensions'

      领域{ kotlinExtensionsEnabled = true }

      //构建gradle(项目) 类路径“io.realm:realm-gradle-plugin:5.9.0”

      【讨论】:

        猜你喜欢
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 2018-10-06
        • 2020-10-07
        • 1970-01-01
        • 1970-01-01
        • 2019-05-07
        • 1970-01-01
        相关资源
        最近更新 更多