Android - Gradle - Unresolved reference: VersionCatalogsExtension

Viewed 689

I'm trying to utilize Gradle versionCatalogs and put all the versions there including Android-specific compileSdkVersion, minSdkVersion, targetSdkVersion.

It's possible to access these versions with the following code:

val libs = rootProject.extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
    libs.findVersion("compileSdkVersion").get().toString() as Integer

But my project is multi-module and I don't want to copy-paste boilerplate code. So, I created extension functions in a separate module.

root-level settings.gradle.kts:

includeBuild("gradle-dependencies")

module-level build.gradle.kts:

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

repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
}

group = "com.foobar.androidtools.gradle"
version = "SNAPSHOT"

dependencies {
    implementation(gradleApi())
}

gradlePlugin {
    plugins.register("Gradle extensions") {
        id = "foobar-gradle-dependencies"
        implementationClass = "com.foobar.gradle_dependencies.DependenciesPlugin"
    }
}

src/main/kotlin/com/foobar/gradle_dependencies/Extensions.kt:

package com.foobar.gradle_dependencies

import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType

fun Project.version(key: String): String = this.extensions
    .getByType<VersionCatalogsExtension>()
    .named("libs")
    .findVersion(key)
    .get()
    .requiredVersion

fun Project.versionInt(key: String) = version(key).toInt()

val Project.KOTLIN_JVM_TARGET_VERSION get() = version("kotlinJvmTargetVersion")
val Project.ANDROID_COMPILE_SDK_VERSION get() = versionInt("compileSdkVersion")
val Project.ANDROID_MIN_SDK_VERSION get() = versionInt("minSdkVersion")
val Project.ANDROID_TARGET_SDK_VERSION get() = versionInt("targetSdkVersion")

Trying to build the project I see the following error:

e: /AndroidTools/gradle-dependencies/src/main/kotlin/com/foobar/gradle_dependencies/Extensions.kt: (4, 33): Unresolved reference: VersionCatalogsExtension

Why the dependency can't be resolved taking into account that import works fine?

AGP: 7.1.3 Gradle: https://services.gradle.org/distributions/gradle-7.4.2-bin.zip

0 Answers
Related