Thorny84
Thorny84

Reputation: 335

Extension of type 'LibraryExtension' does not exist

I created a gradle plugin to unify some settings between the various modules of the application. the summary of the error is this:

org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'common.plugin']
Caused by: org.gradle.api.UnknownDomainObjectException: Extension of type 'LibraryExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension,....]

This is a summary image of the project architecture:
enter image description here

CommonPluginClass:

    class CommonPluginClass : Plugin<Project> {

    private val consumerProguardFileName = "consumer-rules.pro"
    private val proguardFileName = "proguard-rules.pro"
    private val sdkToCompile = 33

    override fun apply(project: Project) {
        println(">>> Adding sugar to gradle files!")
        with(project)
        {
            applyPlugins(this)
            androidConfig(this)
        }
        println(">>> Sugar added for core Module!")
    }

    private fun applyPlugins(project: Project) {
        println(">>> apply plugins!")
        project.pluginManager.run {
            apply("com.android.application")
            apply("kotlin-android")
            apply("kotlin-kapt")
        }
        println(">>> end apply plugins!")
    }

    private fun androidConfig(project: Project) {
        project.extensions.configure<LibraryExtension>{
                defaultConfig.targetSdk = 33
        }

    }
 }

the error occurs inside the androidConfig function when calling configure
I was inspired by now android, dependencies and imports are similar but not build. Can someone unlock it please.

build-logic:convention build.gradle

plugins {
    alias(libs.plugins.kotlin.jvm) apply false
    id "org.gradle.kotlin.kotlin-dsl" version "2.4.1"
}

dependencies {
    compileOnly(libs.android.pluginGradle)
    compileOnly(libs.kotlin.pluginGradle)
}

gradlePlugin {
    plugins {
        commonPlugin {
            id = "common.plugin"
            implementationClass = "CommonPluginClass"
        }
    }
}

LITTLE UPDATE:

I've noticed that any module I enter always identifies it to me as ApplicationExtension

Upvotes: 4

Views: 4910

Answers (1)

Thorny84
Thorny84

Reputation: 335

I found the solution and as usual it's a stupid thing.
the application extension use plugin

apply("com.android.application")

the library or module use plugin

apply("com.android.library")

Upvotes: 5

Related Questions