迁移到Gradle Kotlin DSL后,buildSrc Kotlin常量的未解决引用问题

12

我正在尝试将我的Android项目迁移到使用Gradle Kotlin DSL,用build.gradle.kts文件替换所有的build.gradle文件,并在其中使用Kotlin。之前,我已经有一个包含库和版本常量的Kotlin文件(位于buildSrc->src->main->kotlin中),如下所示:

object Versions {
    const val anyLibVersion = "1.0.0"
}

object Lib {
    const val anyLib = "x:y:${Versions.anyLibVersion}"
}
在 build.gradle 文件中,我可以毫无问题地访问这些常量,但是一旦我把它们切换到 build.gradle.kts 中,就不能再解析它们了。有什么解释吗?
在 build.gradle 文件中,我可以访问这些常量而没有问题,但是一旦我将它们转移到 build.gradle.kts 文件中,就无法再解析它们了。有任何解释吗?

这只是Android Studio的问题吗?还是命令行构建也会失败? - AutonomousApps
重新安装 Android Studio 后现在可以工作了。 - Lemao1981
3个回答

6

通常情况下,您会在 buildSrc/build.gradle.kts 中看到以下内容:

import org.gradle.kotlin.dsl.`kotlin-dsl`

repositories {
    jcenter()
}

plugins {
    `kotlin-dsl`
}

然后在 buildSrc/src/main/java/Dependencies.kt 中放置你的版本/依赖项。


我的 buildSrc/build.gradle.kts 看起来和那个一模一样。所以你的意思是说我犯了一个错误,使用了 Kotlin 源文件夹而不是 Java 源文件夹?我之前确实用过 Java 源文件夹,但认为使用 Kotlin 源文件夹更合适。难道两者都不能用吗? - Lemao1981
它肯定可以使用 java……说实话,我还没有尝试过使用 kotlin……稍后我会在这里测试一下,看看是否可行(或者例如您是否需要在 gradle 中显式设置 sourceSets)。 - John O'Reilly
1
尝试在文件夹名称中使用 kotlin 而不是 java,看起来运行良好。 - John O'Reilly
嗯,那么我的项目肯定出了什么问题... 感谢你的努力! - Lemao1981
1
重新安装Android Studio后现在正常工作。 - Lemao1981

3
您可以通过完全删除 android{} 块,进行 Gradle 同步,然后再添加代码块来修复它。

3

settings.gradle.kts (.) 中,不将 buildSrc 目录视为模块。


预编译脚本插件。

对于 Kotlin DSL 中的 apply from,您应该使用 plugins {}

build.gradle.kts (X:buildSrc)

plugins {
    `java-gradle-plugin`
    `kotlin-dsl`
    `kotlin-dsl-precompiled-script-plugins`
}

repositories {
    mavenCentral()
}

前提条件

buildSrc/src/resources/META-INF/gradlePlugins/some-package-id.properties 文件:

implementation-class=gradlePlugins.android.AndroidLibraryPlugin

buildSrc/src/main/kotlin/gradlePlugins/android/AndroidLibraryPlugin.kt

请注意实现类(implementation-class)的包名应为“some-package-id”。

package gradlePlugins.android

import org.gradle.api.Plugin
import org.gradle.api.Project

class AndroidLibraryPlugin : Plugin<Project> {

    override fun apply(project: Project) {
        project.configurePlugins()
        project.configureAndroid()
        project.configureDependencies()
    }

}

使用插件:

确认“some-package-id”是some-package-id.properties文件的名称。

feature.gradle.kts

plugins {
    id("some-package-id")
}

GL


Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'core-library'] was not found in any of the following sources - Dr.jacky
检查更新后的答案。 - Braian Coronel
feature.gradle.kts 文件中:Plugin [id: 'some-package-id'] was not found in any of the following sources: - Dr.jacky
请检查更新后的答案。首先,您可以仅测试插件消耗,然后将Dagger与其前提条件集成。core-library.gradle.kts文件应该在buildSrc模块之外。 - Braian Coronel
预编译和二进制脚本是不同的东西,你回答得好像它们是一样的。 - user924
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接