JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
16.15k stars 1.17k forks source link

An exception occurred applying plugin request [id: 'org.jetbrains.compose', version: '1.6.0-dev1350'] > Failed to apply plugin 'org.jetbrains.compose' #4082

Closed serbelga closed 9 months ago

serbelga commented 10 months ago

Describe the bug

Following exception is thrown when I use dev version 1.6.0-dev1350 of Compose Multiplatform

An exception occurred applying plugin request [id: 'org.jetbrains.compose', version: '1.6.0-dev1350']
> Failed to apply plugin 'org.jetbrains.compose'.
   > Extension of type 'KotlinProjectExtension' does not exist. Currently registered extension types: [ExtraPropertiesExtension, LibrariesForLibs, VersionCatalogsExtension, RootProjectAccessor, BasePluginExtension, DefaultArtifactPublicationSet, SourceSetContainer, ReportingExtension, JavaToolchainService, JavaPluginExtension, BaseAppModuleExtension, ApplicationAndroidComponentsExtension, NamedDomainObjectContainer<BaseVariantOutput>, ComposeExtension]

* Exception is:
org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'org.jetbrains.compose', version: '1.6.0-dev1350']
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:260)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:238)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyLegacyPlugin(DefaultPluginRequestApplicator.java:190)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.access$300(DefaultPluginRequestApplicator.java:63)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator$1$1.lambda$addLegacy$0(DefaultPluginRequestApplicator.java:150)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyPlugins$0(DefaultPluginRequestApplicator.java:108)
    at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:108)
    at org.gradle.kotlin.dsl.provider.PluginRequestsHandler.handle(PluginRequestsHandler.kt:44)
    at org.gradle.kotlin.dsl.provider.StandardKotlinScriptEvaluator$InterpreterHost.applyPluginsTo(KotlinScriptEvaluator.kt:216)
    at org.gradle.kotlin.dsl.execution.Interpreter$ProgramHost.applyPluginsTo(Interpreter.kt:385)

I'm using plugin as follows:

plugins {
    alias(libs.plugins.composeMultiplatform)

in libs.versions.toml

[versions]
composeMultiplatform = "1.6.0-dev1350"

[plugins]
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }

Affected platforms

Versions

Project

https://github.com/serbelga/Todometer-KMP

igordmn commented 9 months ago

Thanks! As a workaround, place alias(libs.plugins.composeMultiplatform) after alias(libs.plugins.kotlinMultiplatform).

A reproducer:

  1. git clone https://github.com/JetBrains/compose-multiplatform-template

  2. replace Compose version in ./gradle.properties:

    compose.version=1.6.0-dev1354
  3. place id("org.jetbrains.compose") before kotlin("multiplatform") in desktopApp/build.gradle.kts

  4. ./gradlew run

@terrakok, can we place project.configureResourceGenerator() in project.afterEvaluate {?

serbelga commented 9 months ago

Thanks!! now it works 👌

terrakok commented 9 months ago

@igordmn afterEvaluate is a dirty hack 😉 I will fix it a correct way: wrap it into pluginManager.withPlugin(KOTLIN_MPP_PLUGIN_ID) {...}

terrakok commented 9 months ago

fixed by https://github.com/JetBrains/compose-multiplatform/pull/4079/commits/5d19551e015276861ab9627320441485f20febac

okushnikov commented 2 months ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.