代码之家  ›  专栏  ›  技术社区  ›  Chad Schultz

排除领域插件添加的渐变依赖项

  •  4
  • Chad Schultz  · 技术社区  · 8 年前

    偶尔,我的毕业同步会失败。我将得到一个无用的消息,“第三方Gradle插件”可能是原因。如果打开事件日志,将看到以下消息:

    Outdated Kotlin Runtime
                                    Your version of Kotlin runtime in 'Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.2.10@jar' library is 1.2.10-release-109 (1.2.10), while plugin version is 1.2.51-release-Studio3.1-1.
                                    Runtime library should be updated to avoid compatibility problems.
    

    不匹配的数字既不是我的gradle文件中的kotlin版本,也不是android studio中的kotlin插件版本。

    在运行Gradle依赖树之后,我发现了罪魁祸首:

    +--- io.realm:realm-android-kotlin-extensions:5.1.0
    |    \--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.10 -> 1.2.51
    

    我不包括任何 realm-android-kotlin-extensions 图书馆。我想是 classpath "io.realm:realm-gradle-plugin:5.1.0" apply plugin: "realm-android"

    这使事情变得困难。如果是普通的依赖关系,我可以试试

    implementation "io.realm:realm-android-kotlin-extensions:5.1.0" {
        transitive = false
    }
    

    implementation "io.realm:realm-android-kotlin-extensions:5.1.0" {
        exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7"
    }
    

    从理论上讲,这可能是可行的它将被迫使用更新版本的Kotlin,错误将消失,希望Gradle同步将工作,一切都会与世界但如果我尝试这种方法,我的gradle同步将失败,并在事件日志中显示此错误:

    Gradle sync failed: Could not find method io.realm:realm-android-kotlin-extensions:5.1.0() for arguments [build_2krw7i3nwfkd5lrq1ly9b8huw$_run_closure3$_closure29@7b5b2081] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
    

    我假设这是因为这不是我添加的依赖项(可能不是公共依赖项?),它失败了,因为依赖项是通过插件添加的,而不是直接添加到我的gradle文件中。

    那我该怎么解决呢?也许我可以添加一行来告诉realm插件排除过时的依赖项?或者我完全是找错了树,我的科特林版本冲突问题的解决方案完全是另一回事?

    (顺便说一句,如果你想知道我为什么使用Realm 5.1.0,5.3.1会在我们的应用程序中导致一些奇怪的错误,所以我们正在等待一个更高版本的发布,希望它不会再导致这些问题。)

    1 回复  |  直到 8 年前
        1
  •  3
  •   EpicPandaForce Jigar Joshi    8 年前

    我个人的“我希望我一年前就知道了”列表中的一件事是,你可以手动添加realm添加到你的项目中,而不是依赖gradle插件。

     buildscript {
        ext.kotlin_version = '1.2.51'
        ext.realm_version = '5.3.1'
    
        repositories {
            jcenter()
            mavenCentral()
        }
    
       dependencies {
           classpath "io.realm:realm-transformer:5.1.0"
           classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
       }
     }
    
     apply plugin: 'com.android.application'
     apply plugin: 'kotlin-android'
     apply plugin: 'kotlin-kapt'
    
     import io.realm.transformer.RealmTransformer
     android.registerTransform(new RealmTransformer(project))
    
     dependencies {
       implementation "io.realm:realm-annotations:$realm_version"
       implementation "io.realm:realm-android-library:$realm_version"
       implementation "io.realm:realm-android-kotlin-extensions:$realm_version" {
           exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk7"
       }
       kapt "io.realm:realm-annotations-processor:$realm_version"
     }
    

    根据 docs .

    推荐文章