From e47f4137f4804f6b585528d446ad0d793c38f261 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Thu, 22 Jun 2023 15:19:13 +0200 Subject: [PATCH] [Gradle] KotlinJvmTarget: Apply java-base plugin instead of java plugin for `withJava` ^KT-59595 Verification Pending --- .../kotlin/gradle/ConfigurationCacheIT.kt | 11 +++--- .../gradle/targets/jvm/KotlinJvmTarget.kt | 34 ++----------------- 2 files changed, 9 insertions(+), 36 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt index 0b5a324ab30..9362561209a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationCacheIT.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.testbase.* import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.io.TempDir import java.nio.file.Path +import kotlin.test.assertNotNull @DisplayName("Configuration cache") class ConfigurationCacheIT : AbstractConfigurationCacheIT() { @@ -72,7 +73,8 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() { project("new-mpp-lib-and-app/sample-lib", gradleVersion) { val publishedTargets = listOf("kotlinMultiplatform", "jvm6", "nodeJs", "linux64", "mingw64") testConfigurationCacheOf( - *(publishedTargets.map { ":publish${it.replaceFirstChar { it.uppercaseChar() }}PublicationToMavenRepository" }.toTypedArray()), + *(publishedTargets.map { ":publish${it.replaceFirstChar { it.uppercaseChar() }}PublicationToMavenRepository" } + .toTypedArray()), checkUpToDateOnRebuild = false ) } @@ -171,9 +173,8 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() { @GradleTest fun testJvmWithJavaConfigurationCache(gradleVersion: GradleVersion) { project("mppJvmWithJava", gradleVersion) { - build("jar") - - build("jar") { + build("jvmWithJavaJar") + build("jvmWithJavaJar") { assertOutputContains("Reusing configuration cache.") } } @@ -233,7 +234,7 @@ abstract class AbstractConfigurationCacheIT : KGPBaseTest() { vararg taskNames: String, executedTaskNames: List? = null, checkUpToDateOnRebuild: Boolean = true, - buildOptions: BuildOptions = this.buildOptions + buildOptions: BuildOptions = this.buildOptions, ) { assertSimpleConfigurationCacheScenarioWorks( *taskNames, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt index 8885b3793d0..026302f7de9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt @@ -10,12 +10,11 @@ import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.DuplicatesStrategy +import org.gradle.api.internal.tasks.JvmConstants +import org.gradle.api.plugins.JavaBasePlugin import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.SourceSetContainer import org.gradle.api.tasks.compile.AbstractCompile -import org.gradle.api.tasks.testing.Test -import org.gradle.jvm.tasks.Jar import org.gradle.language.jvm.tasks.ProcessResources import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi @@ -107,7 +106,7 @@ abstract class KotlinJvmTarget @Inject constructor( withJavaEnabled = true - project.plugins.apply(JavaPlugin::class.java) + project.plugins.apply(JavaBasePlugin::class.java) val javaSourceSets = project.variantImplementationFactory() .getInstance(project) .sourceSets @@ -143,15 +142,6 @@ abstract class KotlinJvmTarget @Inject constructor( copyUserDefinedAttributesToJavaConfigurations(javaSourceSet) } } - - // Eliminate the Java output configurations from dependency resolution to avoid ambiguity between them and - // the equivalent configurations created for the target: - listOf(JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME) - .forEach { outputConfigurationName -> - project.configurations.findByName(outputConfigurationName)?.isCanBeConsumed = false - } - - disableJavaPluginTasks(javaSourceSets) } private fun setupJavaSourceSetSourcesAndResources( @@ -183,24 +173,6 @@ abstract class KotlinJvmTarget @Inject constructor( } } - private fun disableJavaPluginTasks(javaSourceSet: SourceSetContainer) { - // A 'normal' build should not do redundant job like running the tests twice or building two JARs, - // so disable some tasks and just make them depend on the others: - val targetJar = project.tasks.withType(Jar::class.java).named(artifactsTaskName) - - project.tasks.withType(Jar::class.java).named(javaSourceSet.getByName("main").jarTaskName) { javaJar -> - (javaJar.source as? ConfigurableFileCollection)?.setFrom(targetJar.map { it.source }) - javaJar.archiveFileName.set(targetJar.flatMap { it.archiveFileName }) - javaJar.dependsOn(targetJar) - javaJar.enabled = false - } - - project.tasks.withType(Test::class.java).named(JavaPlugin.TEST_TASK_NAME) { javaTestTask -> - javaTestTask.dependsOn(project.tasks.named(testTaskName)) - javaTestTask.enabled = false - } - } - private fun setupDependenciesCrossInclusionForJava( compilation: KotlinJvmCompilation, javaSourceSet: SourceSet,