Fix publication failed in projects which are using BOM.

^KT-47444 Fixed
This commit is contained in:
Yahor Berdnikau
2021-06-30 14:18:53 +02:00
committed by Space
parent 6e763f5a61
commit a44e82a1d9
4 changed files with 63 additions and 2 deletions
@@ -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")
}
}
}
@@ -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")
}
@@ -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"
}
@@ -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<Triple<String?, String, String?>, 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) {