[Gradle] KotlinJvmTarget: Apply java-base plugin instead of java plugin for withJava

^KT-59595 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-06-22 15:19:13 +02:00
committed by Space Team
parent 55a276705d
commit e47f4137f4
2 changed files with 9 additions and 36 deletions
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.testbase.*
import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.io.TempDir import org.junit.jupiter.api.io.TempDir
import java.nio.file.Path import java.nio.file.Path
import kotlin.test.assertNotNull
@DisplayName("Configuration cache") @DisplayName("Configuration cache")
class ConfigurationCacheIT : AbstractConfigurationCacheIT() { class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
@@ -72,7 +73,8 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
project("new-mpp-lib-and-app/sample-lib", gradleVersion) { project("new-mpp-lib-and-app/sample-lib", gradleVersion) {
val publishedTargets = listOf("kotlinMultiplatform", "jvm6", "nodeJs", "linux64", "mingw64") val publishedTargets = listOf("kotlinMultiplatform", "jvm6", "nodeJs", "linux64", "mingw64")
testConfigurationCacheOf( testConfigurationCacheOf(
*(publishedTargets.map { ":publish${it.replaceFirstChar { it.uppercaseChar() }}PublicationToMavenRepository" }.toTypedArray()), *(publishedTargets.map { ":publish${it.replaceFirstChar { it.uppercaseChar() }}PublicationToMavenRepository" }
.toTypedArray()),
checkUpToDateOnRebuild = false checkUpToDateOnRebuild = false
) )
} }
@@ -171,9 +173,8 @@ class ConfigurationCacheIT : AbstractConfigurationCacheIT() {
@GradleTest @GradleTest
fun testJvmWithJavaConfigurationCache(gradleVersion: GradleVersion) { fun testJvmWithJavaConfigurationCache(gradleVersion: GradleVersion) {
project("mppJvmWithJava", gradleVersion) { project("mppJvmWithJava", gradleVersion) {
build("jar") build("jvmWithJavaJar")
build("jvmWithJavaJar") {
build("jar") {
assertOutputContains("Reusing configuration cache.") assertOutputContains("Reusing configuration cache.")
} }
} }
@@ -233,7 +234,7 @@ abstract class AbstractConfigurationCacheIT : KGPBaseTest() {
vararg taskNames: String, vararg taskNames: String,
executedTaskNames: List<String>? = null, executedTaskNames: List<String>? = null,
checkUpToDateOnRebuild: Boolean = true, checkUpToDateOnRebuild: Boolean = true,
buildOptions: BuildOptions = this.buildOptions buildOptions: BuildOptions = this.buildOptions,
) { ) {
assertSimpleConfigurationCacheScenarioWorks( assertSimpleConfigurationCacheScenarioWorks(
*taskNames, *taskNames,
@@ -10,12 +10,11 @@ import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DuplicatesStrategy 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.plugins.JavaPlugin
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.compile.AbstractCompile 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.language.jvm.tasks.ProcessResources
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
@@ -107,7 +106,7 @@ abstract class KotlinJvmTarget @Inject constructor(
withJavaEnabled = true withJavaEnabled = true
project.plugins.apply(JavaPlugin::class.java) project.plugins.apply(JavaBasePlugin::class.java)
val javaSourceSets = project.variantImplementationFactory<JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory>() val javaSourceSets = project.variantImplementationFactory<JavaSourceSetsAccessor.JavaSourceSetsAccessorVariantFactory>()
.getInstance(project) .getInstance(project)
.sourceSets .sourceSets
@@ -143,15 +142,6 @@ abstract class KotlinJvmTarget @Inject constructor(
copyUserDefinedAttributesToJavaConfigurations(javaSourceSet) 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( 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( private fun setupDependenciesCrossInclusionForJava(
compilation: KotlinJvmCompilation, compilation: KotlinJvmCompilation,
javaSourceSet: SourceSet, javaSourceSet: SourceSet,