summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Sellmair <34319766+sellmair@users.noreply.github.com>2023-07-05 12:49:09 +0200
committerGitHub <noreply@github.com>2023-07-05 12:49:09 +0200
commita87b0f1d89f927896bbeeefa4377bfdeafbf7cb0 (patch)
tree8aa343b0655ee62959bb096311e3034fbdbf1cbc
parent5bba1083ab8e9ef96a2632e2d0a97cbec8bac637 (diff)
downloadkotlinx.serialization-a87b0f1d89f927896bbeeefa4377bfdeafbf7cb0.tar.gz
Manually apply the `java` plugin (#2356)
To support Kotlin Multiplatform 1.9.20 and forward together with the animalsniffer plugin See: https://github.com/xvik/gradle-animalsniffer-plugin/issues/84 https://youtrack.jetbrains.com/issue/KT-59595
-rw-r--r--build.gradle5
-rw-r--r--buildSrc/src/main/kotlin/setupJavaPlugin.kt42
2 files changed, 47 insertions, 0 deletions
diff --git a/build.gradle b/build.gradle
index dffdd2bf..73b566ae 100644
--- a/build.gradle
+++ b/build.gradle
@@ -191,6 +191,11 @@ subprojects {
if (excludedFromBomProjects.contains(project.name)) return
// Animalsniffer setup
+ // Animalsniffer requires java plugin to be applied, but Kotlin 1.9.20
+ // relies on `java-base` for Kotlin Multiplatforms `withJava` implementation
+ // https://github.com/xvik/gradle-animalsniffer-plugin/issues/84
+ // https://youtrack.jetbrains.com/issue/KT-59595
+ JavaPluginUtil.applyJavaPlugin(project)
apply plugin: 'ru.vyarus.animalsniffer'
afterEvaluate { // Can be applied only when the project is evaluated
diff --git a/buildSrc/src/main/kotlin/setupJavaPlugin.kt b/buildSrc/src/main/kotlin/setupJavaPlugin.kt
new file mode 100644
index 00000000..40db563d
--- /dev/null
+++ b/buildSrc/src/main/kotlin/setupJavaPlugin.kt
@@ -0,0 +1,42 @@
+import org.gradle.api.*
+import org.gradle.api.file.*
+import org.gradle.api.plugins.*
+import org.gradle.api.tasks.*
+import org.gradle.api.tasks.testing.*
+import org.gradle.jvm.tasks.*
+import org.jetbrains.kotlin.gradle.plugin.*
+
+/*
+ * Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+object JavaPluginUtil {
+
+ @JvmStatic
+ fun Project.applyJavaPlugin() {
+ plugins.apply("java")
+
+ plugins.withId("org.jetbrains.kotlin.multiplatform") {
+ listOf(
+ JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME,
+ JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME
+ ).forEach { outputConfigurationName ->
+ configurations.findByName(outputConfigurationName)?.isCanBeConsumed = false
+ }
+
+ disableJavaPluginTasks(extensions.getByName("sourceSets") as SourceSetContainer)
+ }
+ }
+}
+
+private fun Project.disableJavaPluginTasks(javaSourceSet: SourceSetContainer) {
+ project.tasks.withType(Jar::class.java).named(javaSourceSet.getByName("main").jarTaskName).configure {
+ dependsOn("jvmTest")
+ enabled = false
+ }
+
+ project.tasks.withType(Test::class.java).named(JavaPlugin.TEST_TASK_NAME) {
+ dependsOn("jvmJar")
+ enabled = false
+ }
+}