如何在 Gradle 插件中引用 libs.versions.toml 文件中的依赖项

问题描述 投票:0回答:1

我们有以下 Gradle 版本目录文件

libs.version.tomml
:

[libraries]
androidx-compose-material3 = { module = "libs.androidx.compose.material3", version = "1.2.1" }

如何在 Gradle 插件中引用上述库:

class ExamplePlugin : Plugin<Project> {

    override fun apply(target: Project) {
        target.dependencies {
            implementation(libs.androidx.compose.material3)
        }
    }
}

我收到错误:

Unresolved reference: libs

kotlin gradle gradle-plugin gradle-kotlin-dsl toml
1个回答
0
投票

版本目录中的类型安全访问器在常规类插件中不可用(也不会),因为此类插件是单独编译的。1

您可以使用

VersionCatalogsExtension
以非类型安全的方式访问版本目录。例如(使用 Kotlin 代码和 Kotlin DSL API):

class ExamplePlugin : Plugin<Project> {

    override fun apply(target: Project) {
        val versionCatalog = target.the<VersionCatalogsExtension>().named("libs")
        target.dependencies {
            versionCatalog.findLibrary("androidx.compose.material3").ifPresent {
                lib -> add("implementation", lib)
            }
        }
    }
}

这种方法在 Gradle 文档中提到过。

注意:我使用了

add
语法而不是
implementation
,因为我不相信
implementation
访问器在类插件中可用(类似于版本目录,类插件无法识别这样的配置自动存在)。


1 看来 Gradle 计划将它们引入 预编译脚本 插件,您可以在脚本文件而不是常规代码中编写这些插件。请参阅GitHub 问题

© www.soinside.com 2019 - 2024. All rights reserved.