Add an experimental feature warnings on MPP usage & metadata publishing
Issue #KT-25200 Fixed
This commit is contained in:
+1
@@ -18,4 +18,5 @@ open class KotlinMultiplatformExtension : KotlinProjectExtension() {
|
|||||||
internal set
|
internal set
|
||||||
|
|
||||||
internal var isGradleMetadataAvailable: Boolean = false
|
internal var isGradleMetadataAvailable: Boolean = false
|
||||||
|
internal var isGradleMetadataExperimental: Boolean = false
|
||||||
}
|
}
|
||||||
+18
@@ -26,6 +26,7 @@ import org.gradle.util.ConfigureUtil
|
|||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
|
||||||
import org.jetbrains.kotlin.konan.target.HostManager
|
import org.jetbrains.kotlin.konan.target.HostManager
|
||||||
import org.jetbrains.kotlin.konan.target.presetName
|
import org.jetbrains.kotlin.konan.target.presetName
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ class KotlinMultiplatformPlugin(
|
|||||||
|
|
||||||
override fun apply(project: Project) {
|
override fun apply(project: Project) {
|
||||||
project.plugins.apply(JavaBasePlugin::class.java)
|
project.plugins.apply(JavaBasePlugin::class.java)
|
||||||
|
SingleWarningPerBuild.show(project, "Kotlin Multiplatform Projects are an experimental feature.")
|
||||||
|
|
||||||
val targetsContainer = project.container(KotlinTarget::class.java)
|
val targetsContainer = project.container(KotlinTarget::class.java)
|
||||||
val targetsFromPreset = TargetFromPresetExtension(targetsContainer)
|
val targetsFromPreset = TargetFromPresetExtension(targetsContainer)
|
||||||
@@ -70,6 +72,7 @@ class KotlinMultiplatformPlugin(
|
|||||||
|
|
||||||
isGradleMetadataAvailable =
|
isGradleMetadataAvailable =
|
||||||
featurePreviews.activeFeatures.find { it.name == "GRADLE_METADATA" }?.let { metadataFeature ->
|
featurePreviews.activeFeatures.find { it.name == "GRADLE_METADATA" }?.let { metadataFeature ->
|
||||||
|
isGradleMetadataExperimental = true
|
||||||
featurePreviews.isFeatureEnabled(metadataFeature)
|
featurePreviews.isFeatureEnabled(metadataFeature)
|
||||||
} ?: true // the feature entry will be gone once the feature is stable
|
} ?: true // the feature entry will be gone once the feature is stable
|
||||||
}
|
}
|
||||||
@@ -102,6 +105,14 @@ class KotlinMultiplatformPlugin(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun configurePublishingWithMavenPublish(project: Project) = project.pluginManager.withPlugin("maven-publish") { _ ->
|
private fun configurePublishingWithMavenPublish(project: Project) = project.pluginManager.withPlugin("maven-publish") { _ ->
|
||||||
|
|
||||||
|
if (project.multiplatformExtension!!.run { isGradleMetadataAvailable && isGradleMetadataExperimental }) {
|
||||||
|
SingleWarningPerBuild.show(
|
||||||
|
project,
|
||||||
|
GRADLE_METADATA_WARNING
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
val targets = project.multiplatformExtension!!.targets
|
val targets = project.multiplatformExtension!!.targets
|
||||||
val kotlinSoftwareComponent = KotlinSoftwareComponent(project, "kotlin", targets)
|
val kotlinSoftwareComponent = KotlinSoftwareComponent(project, "kotlin", targets)
|
||||||
|
|
||||||
@@ -233,6 +244,13 @@ class KotlinMultiplatformPlugin(
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val METADATA_TARGET_NAME = "metadata"
|
const val METADATA_TARGET_NAME = "metadata"
|
||||||
|
|
||||||
|
const val GRADLE_METADATA_WARNING =
|
||||||
|
// TODO point the user to some MPP docs explaining this in more detail
|
||||||
|
"This build is set up to publish Kotlin multiplatform libraries with experimental Gradle metadata. " +
|
||||||
|
"Future Gradle versions may fail to resolve dependencies on these publications. " +
|
||||||
|
"You can disable Gradle metadata usage during publishing and dependencies resolution by removing " +
|
||||||
|
"`enableFeaturePreview('GRADLE_METADATA')` from the settings.gradle file."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. 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.utils
|
||||||
|
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
internal object SingleWarningPerBuild {
|
||||||
|
private val rootModuleReceivedWarning = WeakHashMap<Project, MutableSet<String>>()
|
||||||
|
|
||||||
|
fun show(project: Project, warningText: String) {
|
||||||
|
val receivedWarnings = rootModuleReceivedWarning.computeIfAbsent(project.rootProject) { mutableSetOf() }
|
||||||
|
if (receivedWarnings.add(warningText)) {
|
||||||
|
project.logger.warn(warningText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user