diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PublishingIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PublishingIT.kt new file mode 100644 index 00000000000..b2b63ef0602 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/PublishingIT.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle + +import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.testbase.* +import org.junit.jupiter.api.DisplayName + +@DisplayName("Artifacts publication") +@SimpleGradlePluginTests +class PublishingIT : KGPBaseTest() { + + private val String.fullProjectName get() = "publishing/$this" + + @DisplayName("Should allow to publish library in project which is using BOM (KT-47444)") + @GradleTest + internal fun shouldPublishCorrectlyWithOmittedVersion(gradleVersion: GradleVersion) { + project("withBom".fullProjectName, gradleVersion) { + build("publishToMavenLocal") + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/build.gradle new file mode 100644 index 00000000000..98fd153f027 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/build.gradle @@ -0,0 +1,25 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' + id 'maven-publish' +} + +group = "org.example" +version = "1.0" + +publishing { + publications { + maven(MavenPublication) { + from components.java + } + } +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation(platform("com.fasterxml.jackson:jackson-bom:2.12.3")) + implementation("com.fasterxml.jackson.core:jackson-core") +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/src/main/kotlin/Example.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/src/main/kotlin/Example.kt new file mode 100644 index 00000000000..459fe35c2c0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/publishing/withBom/src/main/kotlin/Example.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package testProject.publishing.withBom.src.main.kotlin + +class Example { + fun one() = "One" +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt index 627b3ed4826..e2bff7591b7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/mppDependencyRewritingUtils.kt @@ -11,6 +11,7 @@ import org.gradle.api.Project import org.gradle.api.XmlProvider import org.gradle.api.artifacts.ModuleDependency import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.artifacts.ResolvedDependency import org.gradle.api.attributes.Usage import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext @@ -133,7 +134,7 @@ private fun associateDependenciesWithActualModuleDependencies( } ) - val resolvedDependencies by lazy { + val resolvedDependencies: Map, ResolvedDependency> by lazy { // don't resolve if no project dependencies on MPP projects are found targetDependenciesConfiguration.resolvedConfiguration.lenientConfiguration.allModuleDependencies.associateBy { Triple(it.moduleGroup, it.moduleName, it.moduleVersion) @@ -185,7 +186,7 @@ private fun associateDependenciesWithActualModuleDependencies( ) } else -> { - val resolvedDependency = resolvedDependencies[Triple(dependency.group!!, dependency.name, dependency.version!!)] + val resolvedDependency = resolvedDependencies[Triple(dependency.group, dependency.name, dependency.version)] ?: return@associate noMapping if (resolvedDependency.moduleArtifacts.isEmpty() && resolvedDependency.children.size == 1) {