diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index ed1bbb3a1bd..0a6bba74159 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -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: diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-app/build.gradle index 6b0f5cbf84a..32ce2e268ff 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-app/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-app/build.gradle @@ -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() + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt index e482996fc08..cb96cc89761 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTargetConfigurator.kt @@ -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 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( buildOutputCleanupRegistry: BuildOutputCleanupRegistry ) : AbstractKotlinTargetConfigurator>(buildOutputCleanupRegistry) { - override fun configureTarget( - target: KotlinOnlyTarget - ) { - super.configureTarget(target) - setCompatibilityOfAbstractCompileTasks(target.project) - } - override fun configureArchivesAndComponent(target: KotlinOnlyTarget) { val project = target.project @@ -381,14 +353,6 @@ open class KotlinTargetConfigurator( 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 = "" - } - } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index caf18db9949..8fc09550b24 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -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)