diff options
author | Sebastian Sellmair <34319766+sellmair@users.noreply.github.com> | 2023-07-05 12:49:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-05 12:49:09 +0200 |
commit | a87b0f1d89f927896bbeeefa4377bfdeafbf7cb0 (patch) | |
tree | 8aa343b0655ee62959bb096311e3034fbdbf1cbc | |
parent | 5bba1083ab8e9ef96a2632e2d0a97cbec8bac637 (diff) | |
download | kotlinx.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.gradle | 5 | ||||
-rw-r--r-- | buildSrc/src/main/kotlin/setupJavaPlugin.kt | 42 |
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 + } +} |