https://kotlinlang.org logo
Title
s

Samuel Gammon

04/07/2023, 8:31 PM
hello gradle kotlin friends, i am having trouble upgrading a library we publish to
1.8.20
. i get the following error
Could not create task ':samples:fullstack:basic:frontend:jsJar'.
> DefaultTaskCollection#configureEach(Action) on task set cannot be executed in the current context.
it looks like this is a known issue solved in `1.9.x`: https://youtrack.jetbrains.com/issue/KT-56357
but the workaround is very mysterious to me:
publish {
    pom.packaging = "klib"
    org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories.getProvider(project)

    artifact(tasks.named("wasmJar")) {
        extension = "klib"
    }
specifically he added
org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories.getProvider(project)
but i don't know where to add that in my Gradle KTS, or why it works
if anybody has seen this and has any advice it would be very welcome 🙂 we are stuck
stacktrace looks internal to kotlin plugin
Caused by: org.gradle.api.internal.AbstractMutationGuard$IllegalMutationException: DefaultTaskCollection#configureEach(Action) on task set cannot be executed in the current context.
        at org.gradle.api.internal.AbstractMutationGuard.createIllegalStateException(AbstractMutationGuard.java:39)
        at org.gradle.api.internal.AbstractMutationGuard.assertMutationAllowed(AbstractMutationGuard.java:27)
        at org.gradle.api.internal.DefaultDomainObjectCollection.assertMutable(DefaultDomainObjectCollection.java:458)
        at org.gradle.api.internal.DefaultDomainObjectCollection.configureEach(DefaultDomainObjectCollection.java:168)
        at org.gradle.api.internal.tasks.DefaultRealizableTaskCollection.configureEach(DefaultRealizableTaskCollection.java:234)
        at org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories$Companion$getProvider$2$1.invoke(VariantImplementationFactories.kt:67)
        at org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories$Companion$getProvider$2$1.invoke(VariantImplementationFactories.kt:66)
        at org.jetbrains.kotlin.gradle.utils.SingleAction.run(singleAction.kt:31)
        at org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories$Companion.getProvider(VariantImplementationFactories.kt:66)
        at org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories$Companion.get(VariantImplementationFactories.kt:76)
        at org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.UtilsKt.getLibsDirectory(Utils.kt:56)
        at org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator$createArchiveTasks$1$1.invoke(KotlinJsIrTargetConfigurator.kt:71)
        at org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator$createArchiveTasks$1$1.invoke(KotlinJsIrTargetConfigurator.kt:69)
        at org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTargetConfigurator$sam$org_gradle_api_Action$0.execute(KotlinJsIrTargetConfigurator.kt)
        at org.gradle.api.internal.DefaultMutationGuard$2.execute(DefaultMutationGuard.java:44)
        at org.gradle.api.internal.DefaultMutationGuard$2.execute(DefaultMutationGuard.java:44)
        at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:123)
        at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction$1.run(DefaultCollectionCallbackActionDecorator.java:110)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
        at org.gradle.api.internal.DefaultCollectionCallbackActionDecorator$BuildOperationEmittingAction.execute(DefaultCollectionCallbackActionDecorator.java:107)
        at org.gradle.internal.ImmutableActionSet$SetWithManyActions.execute(ImmutableActionSet.java:329)
        at org.gradle.api.internal.DefaultDomainObjectCollection.doAdd(DefaultDomainObjectCollection.java:262)
        at org.gradle.api.internal.DefaultNamedDomainObjectCollection.doAdd(DefaultNamedDomainObjectCollection.java:113)
        at org.gradle.api.internal.DefaultDomainObjectCollection.add(DefaultDomainObjectCollection.java:256)
        at org.gradle.api.internal.DefaultNamedDomainObjectCollection$AbstractDomainObjectCreatingProvider.tryCreate(DefaultNamedDomainObjectCollection.java:944)
        ... 216 more
we have solved this. it seems to be a bug where we are calling the JS IR compiler
kotlin {
+  org.jetbrains.kotlin.gradle.plugin.VariantImplementationFactories.getProvider(project)
   js(IR) {
     browser()
   }
inserting that line above the IR compiler config fixes it, in case anybody else runs into this. will file on youtrack 🙂
v

Vampire

04/08/2023, 3:02 AM
Without knowing it or having looked into it, the problem seems to be that the Kotlin plugin does something deferred that then happens to late at an unsupported time and with that call the action is done eagerly.