Always apply the java-base plugin from the new MPP plugin

This fixes misconfigured test tasks and the `Usage` attribute
compatibility rule missing that is added by `java-base`.

Issue #KT-26301 Fixed
This commit is contained in:
Sergey Igushkin
2018-08-21 22:27:10 +03:00
parent 2040cdde4b
commit ef85fe7ab2
4 changed files with 21 additions and 50 deletions
@@ -89,8 +89,9 @@ class NewMultiplatformIT : BaseGradleIT() {
}
}
build("assemble") {
build("assemble", "resolveRuntimeDependencies") {
checkAppBuild()
assertTasksExecuted(":resolveRuntimeDependencies") // KT-26301
}
// Now run again with a project dependency instead of a module one:
@@ -59,4 +59,12 @@ kotlin {
}
fromPreset(presets.js, 'nodeJs')
}
}
task resolveRuntimeDependencies(type: DefaultTask) {
doFirst {
// KT-26301
def configName = kotlin.targets.jvm6.compilations.main.runtimeDependencyConfigurationName
configurations[configName].resolve()
}
}
@@ -32,7 +32,6 @@ import org.gradle.nativeplatform.test.tasks.RunTestExecutable
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.tasks.KonanCompilerDownloadTask
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
@@ -210,44 +209,24 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
protected fun configureBuild(target: KotlinTargetType) {
val project = target.project
val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME)
project.tasks.maybeCreate(buildNeededTaskName, DefaultTask::class.java).apply {
description = "Assembles and tests this project and all projects it depends on."
group = "build"
dependsOn("build")
if (testCompilation is KotlinCompilationToRunnableFiles) {
addDependsOnTaskInOtherProjects(this@apply, true, name, testCompilation.deprecatedRuntimeConfigurationName)
}
}
project.tasks.maybeCreate(buildDependentTaskName, DefaultTask::class.java).apply {
setDescription("Assembles and tests this project and all projects that depend on it.")
setGroup("build")
dependsOn("build")
doFirst {
if (!project.gradle.includedBuilds.isEmpty()) {
project.logger.warn("[composite-build] Warning: `" + path + "` task does not build included builds.")
}
}
if (testCompilation is KotlinCompilationToRunnableFiles) {
addDependsOnTaskInOtherProjects(this@apply, false, name, testCompilation.deprecatedRuntimeConfigurationName)
}
val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME)
val buildNeeded = project.tasks.getByName(JavaBasePlugin.BUILD_NEEDED_TASK_NAME)
val buildDependent = project.tasks.getByName(JavaBasePlugin.BUILD_DEPENDENTS_TASK_NAME)
if (testCompilation is KotlinCompilationToRunnableFiles) {
addDependsOnTaskInOtherProjects(buildNeeded, true, testCompilation.deprecatedRuntimeConfigurationName)
addDependsOnTaskInOtherProjects(buildDependent, false, testCompilation.deprecatedRuntimeConfigurationName)
}
}
private fun addDependsOnTaskInOtherProjects(
task: Task, useDependedOn: Boolean, otherProjectTaskName: String,
configurationName: String
) {
private fun addDependsOnTaskInOtherProjects(task: Task, useDependedOn: Boolean, configurationName: String) {
val project = task.project
val configuration = project.configurations.getByName(configurationName)
task.dependsOn(configuration.getTaskDependencyFromProjectDependency(useDependedOn, otherProjectTaskName))
task.dependsOn(configuration.getTaskDependencyFromProjectDependency(useDependedOn, task.name))
}
companion object {
const val buildNeededTaskName = "buildAllNeeded"
const val buildDependentTaskName = "buildAllDependents"
const val testTaskNameSuffix = "test"
fun defineConfigurationsForCompilation(
@@ -333,13 +312,6 @@ open class KotlinTargetConfigurator<KotlinCompilationType: KotlinCompilation>(
buildOutputCleanupRegistry: BuildOutputCleanupRegistry
) : AbstractKotlinTargetConfigurator<KotlinOnlyTarget<KotlinCompilationType>>(buildOutputCleanupRegistry) {
override fun configureTarget(
target: KotlinOnlyTarget<KotlinCompilationType>
) {
super.configureTarget(target)
setCompatibilityOfAbstractCompileTasks(target.project)
}
override fun configureArchivesAndComponent(target: KotlinOnlyTarget<KotlinCompilationType>) {
val project = target.project
@@ -381,14 +353,6 @@ open class KotlinTargetConfigurator<KotlinCompilationType: KotlinCompilation>(
publications.artifacts.add(jarArtifact)
publications.attributes.attribute(ArtifactAttributes.ARTIFACT_FORMAT, ArtifactTypeDefinition.JAR_TYPE)
}
private fun setCompatibilityOfAbstractCompileTasks(project: Project) = with (project) {
tasks.withType(AbstractKotlinCompile::class.java).all {
// Workaround: these are input properties and should not hold null values:
it.targetCompatibility = ""
it.sourceCompatibility = ""
}
}
}
@@ -13,8 +13,7 @@ import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.internal.file.FileResolver
import org.gradle.api.internal.plugins.DslObject
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.plugins.ReportingBasePlugin
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.internal.publication.MavenPublicationInternal
@@ -51,8 +50,7 @@ class KotlinMultiplatformPlugin(
}
override fun apply(project: Project) {
project.plugins.apply(BasePlugin::class.java)
project.plugins.apply(ReportingBasePlugin::class.java)
project.plugins.apply(JavaBasePlugin::class.java)
val targetsContainer = project.container(KotlinTarget::class.java)
val targetsFromPreset = TargetFromPresetExtension(targetsContainer)