diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index c0d3a338341..b1d3a8407b5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -7,12 +7,14 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.provider.Provider import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.utils.markResolvable import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNodeJsExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin.Companion.kotlinNpmResolutionManager +import org.jetbrains.kotlin.gradle.targets.js.npm.KotlinNpmResolutionManager import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.implementing import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask @@ -22,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.ST import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockCopyTask.Companion.UPGRADE_YARN_LOCK import org.jetbrains.kotlin.gradle.tasks.CleanDataTask import org.jetbrains.kotlin.gradle.tasks.registerTask +import org.jetbrains.kotlin.gradle.utils.providerWithLazyConvention open class YarnPlugin : Plugin { override fun apply(project: Project): Unit = project.run { @@ -46,13 +49,20 @@ open class YarnPlugin : Plugin { } } + val objectFactory = project.objects + val rootPackageJson = tasks.register(RootPackageJsonTask.NAME, RootPackageJsonTask::class.java) { task -> task.dependsOn(nodeJsTaskProviders.npmCachesSetupTaskProvider) task.group = NodeJsRootPlugin.TASKS_GROUP_NAME task.description = "Create root package.json" task.npmResolutionManager.apply { - set(project.kotlinNpmResolutionManager) + // npmResolutionManager is initialised inside NodeJsRootPlugin after YarnPlugin applied + set( + objectFactory.providerWithLazyConvention { + project.kotlinNpmResolutionManager.get() + } + ) disallowChanges() } @@ -83,7 +93,7 @@ open class YarnPlugin : Plugin { it.dependsOn(packageJsonUmbrella) } - val storeYarnLock = tasks.register(STORE_YARN_LOCK_NAME, YarnLockStoreTask::class.java) { task -> + tasks.register(STORE_YARN_LOCK_NAME, YarnLockStoreTask::class.java) { task -> task.dependsOn(kotlinNpmInstall) task.inputFile.set(nodeJs.rootPackageDir.resolve("yarn.lock")) task.outputDirectory.set(yarnRootExtension.lockFileDirectory)