From e25778a7191aaef3534a1f23e41ba034b22d1c22 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Wed, 4 May 2022 12:51:36 +0200 Subject: [PATCH] Fix ConcurrentModificationException This exception is happening on build configuration trying to remove default jar task artifacts from published one. I've set 'jar' task to be always disabled instead and just add shadow jar to artifacts. --- buildSrc/src/main/kotlin/artifacts.kt | 33 ++++++++++--------- .../dependencies-maven-all/build.gradle.kts | 4 +-- .../tools/kotlin-main-kts/build.gradle.kts | 6 +--- .../jvm-abi-gen/embeddable/build.gradle.kts | 1 - prepare/compiler-embeddable/build.gradle.kts | 6 ++-- .../build.gradle.kts | 4 +-- 6 files changed, 25 insertions(+), 29 deletions(-) diff --git a/buildSrc/src/main/kotlin/artifacts.kt b/buildSrc/src/main/kotlin/artifacts.kt index 7b6aeef8c0c..0c3e93430d1 100644 --- a/buildSrc/src/main/kotlin/artifacts.kt +++ b/buildSrc/src/main/kotlin/artifacts.kt @@ -47,26 +47,29 @@ fun Project.testsJar(body: Jar.() -> Unit = {}): Jar { } } -var Project.artifactsRemovedDiagnosticFlag: Boolean - get() = extra.has("artifactsRemovedDiagnosticFlag") && extra["artifactsRemovedDiagnosticFlag"] == true - set(value) { - extra["artifactsRemovedDiagnosticFlag"] = value - } +fun Project.setPublishableArtifact( + jarTask: TaskProvider +) { + addArtifact("runtimeElements", jarTask) + addArtifact("apiElements", jarTask) + addArtifact("archives", jarTask) +} -fun Project.removeArtifacts(configuration: Configuration, task: Task) { - configuration.artifacts.removeAll { artifact -> - artifact.file in task.outputs.files - } - - artifactsRemovedDiagnosticFlag = true +fun removeJarTaskArtifact( + jarTask: TaskProvider +): Configuration.() -> Unit = { + val jarFile = jarTask.get().archiveFile.get().asFile + artifacts.removeIf { it.file == jarFile } } fun Project.noDefaultJar() { - tasks.named("jar").configure { - configurations.forEach { cfg -> - removeArtifacts(cfg, this) - } + val jarTask = tasks.named("jar") { + enabled = false } + + configurations.named("apiElements", removeJarTaskArtifact(jarTask)) + configurations.named("runtimeElements", removeJarTaskArtifact(jarTask)) + configurations.named("archives", removeJarTaskArtifact(jarTask)) } fun Jar.addEmbeddedRuntime() { diff --git a/libraries/scripting/dependencies-maven-all/build.gradle.kts b/libraries/scripting/dependencies-maven-all/build.gradle.kts index 37450504b31..44baff8217f 100644 --- a/libraries/scripting/dependencies-maven-all/build.gradle.kts +++ b/libraries/scripting/dependencies-maven-all/build.gradle.kts @@ -147,6 +147,4 @@ val resultJar by task { } -addArtifact("runtime", resultJar) -addArtifact("runtimeElements", resultJar) -addArtifact("archives", resultJar) +setPublishableArtifact(resultJar) diff --git a/libraries/tools/kotlin-main-kts/build.gradle.kts b/libraries/tools/kotlin-main-kts/build.gradle.kts index 559694ed83c..1ac4de07d13 100644 --- a/libraries/tools/kotlin-main-kts/build.gradle.kts +++ b/libraries/tools/kotlin-main-kts/build.gradle.kts @@ -121,10 +121,6 @@ val resultJar by task { } } -addArtifact("apiElements", resultJar) -addArtifact("runtimeElements", resultJar) -addArtifact("archives", resultJar) - +setPublishableArtifact(resultJar) sourcesJar() - javadocJar() diff --git a/plugins/jvm-abi-gen/embeddable/build.gradle.kts b/plugins/jvm-abi-gen/embeddable/build.gradle.kts index bbd457133ed..34dbbe91b06 100644 --- a/plugins/jvm-abi-gen/embeddable/build.gradle.kts +++ b/plugins/jvm-abi-gen/embeddable/build.gradle.kts @@ -12,7 +12,6 @@ dependencies { publish() -noDefaultJar() runtimeJar(rewriteDefaultJarDepsToShadedCompiler()) sourcesJar() diff --git a/prepare/compiler-embeddable/build.gradle.kts b/prepare/compiler-embeddable/build.gradle.kts index f5a3f33c4a5..9cd91d0af54 100644 --- a/prepare/compiler-embeddable/build.gradle.kts +++ b/prepare/compiler-embeddable/build.gradle.kts @@ -40,8 +40,6 @@ sourceSets { "test" { projectDefault() } } -publish() - // dummy is used for rewriting dependencies to the shaded packages in the embeddable compiler compilerDummyJar(compilerDummyForDependenciesRewriting("compilerDummy") { archiveClassifier.set("dummy") @@ -54,6 +52,10 @@ val runtimeJar = runtimeJar(embeddableCompiler()) { mergeServiceFiles() } +publish { + setArtifacts(listOf(runtimeJar)) +} + sourcesJar { val compilerTask = project(":kotlin-compiler").tasks.named("sourcesJar") dependsOn(compilerTask) diff --git a/prepare/ide-plugin-dependencies/kotlin-backend-native-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/kotlin-backend-native-for-ide/build.gradle.kts index 8fc778beae6..282bdd7457d 100644 --- a/prepare/ide-plugin-dependencies/kotlin-backend-native-for-ide/build.gradle.kts +++ b/prepare/ide-plugin-dependencies/kotlin-backend-native-for-ide/build.gradle.kts @@ -79,9 +79,7 @@ idePluginDependency { } } - addArtifact("runtime", resultJar) - addArtifact("runtimeElements", resultJar) - addArtifact("archives", resultJar) + setPublishableArtifact(resultJar) publish()