【问题标题】:Plugin [id: 'dagger.hilt.android.plugin'] was not found in any of the following sources在以下任何来源中都找不到插件 [id: 'dagger.hilt.android.plugin']
【发布时间】:2021-10-09 23:47:58
【问题描述】:

当我想在我的项目中使用 @AndroidEntryPoint 时收到以下警告,它是 hilt 的一个属性。

 Expected @AndroidEntryPoint to have a value. Did you forget to apply the Gradle Plugin? (dagger.hilt.android.plugin)

当我尝试将 id 'dagger.hilt.android.plugin' 添加到我的项目的模块级 build.gradle 文件时,我收到以下错误。

org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'dagger.hilt.android.plugin'] was not found in any of the following sources:

我尝试将其添加到项目模块级别的 build.gradle 文件中,如下所示。他们都报错。

我尝试将它作为类路径添加到项目级别的 build.gradle 文件中,在这种情况下我仍然收到错误。

当我创建默认项目时,创建了一个 settings.gradle 结构,如下所示。这是我第一次使用这个版本。我的Android Studio 版本Android Studio - Bumblebee | 2021.1.1 金丝雀 13

【问题讨论】:

    标签: android android-studio gradle gradle-kotlin-dsl dagger-hilt


    【解决方案1】:

    我迟到了。 由于用于在项目级别添加依赖项的新 Gradle 语法,我在 Android Studio Bumblebee 中也遇到了同样的问题。

    要在项目级别添加 Dagger Hilt,您可以使用以下语法:

    id 'com.google.dagger.hilt.android' version '2.41' apply false
    

    在撰写本文时,最新版本是 2.41。它在mavenCentral repository

    【讨论】:

    • 很好,解决了我的问题
    【解决方案2】:

    经过长时间的奋斗,我解决了如下问题;

    我在 settings.gradle 中添加了一个 resolutionStrategy,如下所示。

     pluginManagement {
            repositories {...}
            plugins { ...}
         resolutionStrategy {
                eachPlugin {
                    if( requested.id.id == 'dagger.hilt.android.plugin') {
                        useModule("com.google.dagger:hilt-android-gradle-plugin:2.39.1")
                    }
                }
            }
        }
    

    然后,当我将如下所示的 hilt 插件添加到模块级 build.gradle 文件中时,它已正确更新。

    plugins{
    ...
    id 'dagger.hilt.android.plugin'
    }
    

    【讨论】:

    • 但是为什么呢?我没有添加它,仍然可以使用 Hilt。仅当我将根 build.gradle 转换为 build.gradle.kts 时,才会出现此错误(在我的情况下)。只是尝试一堆随机的东西,然后用一种巧合的随机方式粘贴到这里,这对错误的运行没有帮助
    • @AtulGupta 在我的例子中,gradle 的最后一个版本是在 settings.gradle 中进行定义。由于在项目级别的settings.gradle中不能像build.gradle一样给出classpath,所以我用这个方法解决了。
    • 是的,同意...这个特定的字符串序列确实解决了您的问题,但它显然没有解释根本原因
    • 我也添加了我的answer,这解释了为什么需要这个配置
    【解决方案3】:

    build.gradle 中的plugin{} 块用于定义可应用于根build.gradle 和所有(或部分)Gradle 子项目的Gradle 插件。

    使用插件块的一个警告是它只解析存在于 Gradle 插件门户中的插件(参见doc)或自定义 Maven 和 Ivy 插件除了实际实现插件的人工制品之外,存储库还必须包含插件标记人工制品(参见doc)。 对于 Android Gradle 插件和 Hilt 插件,他们没有将这些插件发布到 Gradle 插件门户,他们也没有发布他们的Plugin Marker Artifacts

    由于上面缺少 插件标记工件,您需要通过添加以下代码使用 Plugin Resolution Rulessettings.gradle 手动解析插件(这是特定于 Hilt Gradle 插件的其他插件)对照requested.id.id检查不同)

    pluginManagement {
        repositories {
            // Your repo from where Gradle will search for Gradle plugins
        }
        plugins {
            // ...
        }
        resolutionStrategy {
            eachPlugin {
                if(requested.id.id == 'dagger.hilt.android.plugin') {
                        useModule("com.google.dagger:hilt-android-gradle-plugin:${requested.version}")
                }
            }
        }
    }
    
    

    【讨论】:

    • 非常感谢{requested.version}
    【解决方案4】:

    用于将dagger hilt 添加到您的项目中。请按照以下步骤操作

    hilt 依赖项添加到模块的build.gradle。我假设您使用的是Kotlin,否则您必须使用annotationProcessor insted of kapt 插件。

    dependencies {
      //..
      implementation 'com.google.dagger:hilt-android:2.39.1'
      kapt 'com.google.dagger:hilt-compiler:2.39.1'
      //..
       }
    

    hilt gradle plugin 添加到项目的build.gradle

    dependencies {
        //..
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.39.1'
      }
    

    kotlin-kapthilt 插件应用到模块build.gradle

    plugins {
        id 'kotlin-kapt'
        id 'dagger.hilt.android.plugin'
    }
    

    【讨论】:

    • 在 gradle 最新版本中我不能像经典方法那样做到这一点。
    • 你用的是什么版本?
    • 你确定2.39.1版本的匕首真的可用吗?在撰写此评论时,2.31-alpha 可用。
    • @GopalSinghSirvi 目前最新版本的刀柄是2.40.5,于2021年12月7日发布。github.com/google/dagger/releases/tag/dagger-2.40.5
    【解决方案5】:

    只需将其添加到项目的根 build.gradle 文件即可。

    buildscript {
      repositories {
        // other repositories...
        mavenCentral()
      }
      dependencies {
        // other plugins...
        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.40'
      }
    }
    

    【讨论】:

    • 这是正确的解决方案,不需要 AndroidEngineX 告诉您的所有内容,文档在这里dagger.dev/hilt/gradle-setup.html
    • @D76X 这是一种较旧的方法。在最新的 Android 工作室中,您必须使用 AndroidEngineX 和其他人建议的方式来完成。
    【解决方案6】:

    首先,将hilt-android-gradle-plugin 插件添加到项目的根目录build.gradle 文件:

    buildscript {
        ...
        dependencies {
            def hilt_version = "2.39.1"
            classpath 'com.android.tools.build:gradle:7.0.3'
            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
            classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"
        }
    }
    

    然后,应用 Gradle 插件并将这些依赖项添加到您的 app/build.gradle 文件中:

    plugins {
      id 'kotlin-kapt' // for annotation processing
      id 'dagger.hilt.android.plugin'
    }
    
    android {
        ...
    }
    
    dependencies {
        def hilt_version = "2.39.1"
        implementation "com.google.dagger:hilt-android:$hilt_version"
        kapt "com.google.dagger:hilt-compiler:$hilt_version"
    }
    
     
    kapt {
        correctErrorTypes true
    }
    

    在您的项目中启用 Java 8,将以下内容添加到 app/build.gradle

    android {
        ...
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toSttring()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2022-07-30
      • 2020-05-17
      • 2022-06-15
      • 2019-03-04
      • 2022-12-29
      相关资源
      最近更新 更多