在 buildSrc 中定义的 Gradle Kotlin DSL 未解析的引用

Posted

技术标签:

【中文标题】在 buildSrc 中定义的 Gradle Kotlin DSL 未解析的引用【英文标题】:Gradle Kotlin DSL unresolved references defined in buildSrc 【发布时间】:2022-01-06 08:22:36 【问题描述】:

我正在尝试使用 Kotlin DSL,但我无法让它识别我在 buildSrc 中定义的对象。它们由 IDE 解决,但是当我编译代码时它不起作用。

这是我的项目结构:

build.gradle.kts
settings.gradle.kts
+buildSrc
    build.gradle.kts
    +src
        +main
            +java
                Dependencies.kt
                Versions.kt
+module1
    build.gradle.kts
+module2
    build.gradle.kts
    

Dependencies.kt 的内容:

/**
 * To define plugins
 */
object BuildPlugins 
    val gradle by lazy  "com.android.tools.build:gradle:$Versions.gradlePlugin" 
    val kotlinGradle by lazy  "org.jetbrains.kotlin:kotlin-gradle-plugin:$Versions.kotlin" 
    val safeArgs by lazy  "androidx.navigation:navigation-safe-args-gradle-plugin:$Versions.safeArgs" 


/**
 * To define dependencies
 */
object Deps 
    val appCompat by lazy  "androidx.appcompat:appcompat:$Versions.appCompat" 
    val core by lazy  "androidx.core:core-ktx:$Versions.core" 
    val timber by lazy  "com.jakewharton.timber:timber:$Versions.timber" 
    val kotlin by lazy  "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$Versions.kotlin" 
    val material by lazy  "com.google.android.material:material:$Versions.material" 
    val constraintLayout by lazy  "androidx.constraintlayout:constraintlayout:$Versions.constraintLayout" 


项目范围的 build.gradle.kts(首先失败的那个):

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript 
    repositories 
        google()
        mavenCentral()
    
    dependencies 
        BuildPlugins.gradle
        BuildPlugins.kotlinGradle
        BuildPlugins.safeArgs

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    

...

我还想指出,模块 gradle 文件中无法识别 android ... 块,但我认为这可能是因为编译失败。

【问题讨论】:

【参考方案1】:

src/main/java 下有 Kotlin 文件。它们应该在 src/main/kotlin 中,并且您需要在 buildSrc Gradle 文件中包含 Kotlin 构建支持(也许您有这个,您没有显示 buildSrc/build.gradle.kts 中的内容)

plugins 
    `kotlin-dsl`


repositories 
    mavenCentral()

【讨论】:

以上是关于在 buildSrc 中定义的 Gradle Kotlin DSL 未解析的引用的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑦ ( 自定义 Gradle 插件导入方式 | buildSrc 插件导入 | 构建脚本中自定义插件 | 独立文件 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ⑥ ( 在 buildSrc 模块中依赖 Android Gradle 插件 | 完整代码示例 )

Android Gradle 插件Gradle 自定义 Plugin 插件 ① ( buildSrc 目录中实现 Gradle 插件 | 创建 src/main/groovy 源码目录并编译 )

Android gradle 自定义插件

Android Gradle 插件Gradle 自定义 Plugin 插件 ② ( buildSrc 目录中实现 Gradle 插件 | 实现 Gradle 插件代码 | 模块引入插件并编译 )