[Gradle] Avoid configuration resolution in MPP projects
Add `getResolvedArtifactsCompat` for compatibility with gradle <7.4 However configurations are still resolved in these gradle versions ^KT-51940 Verification Pending
This commit is contained in:
committed by
Space Team
parent
b3890885c4
commit
fa4bbdf6d6
+21
@@ -1113,6 +1113,27 @@ class HierarchicalMppIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@GradleTestVersions(maxVersion = TestVersions.Gradle.G_7_1)
|
||||||
|
@DisplayName("KT-51940: Test ArtifactCollection.getResolvedArtifactsCompat with Gradle earlier than 7.4")
|
||||||
|
fun `test getResolvedArtifactsCompat with Gradle earlier than 7_4`(gradleVersion: GradleVersion) {
|
||||||
|
project("kt-51940-hmpp-resolves-configurations-during-configuration", gradleVersion = gradleVersion) {
|
||||||
|
build("assemble", "--dry-run") {
|
||||||
|
assertOutputContains("Configuration Resolved")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GradleTest
|
||||||
|
@GradleTestVersions(minVersion = TestVersions.Gradle.G_7_4)
|
||||||
|
@DisplayName("KT-51940: Configurations should not resolved during configuration phase")
|
||||||
|
fun `test configurations should not resolved during configuration phase`(gradleVersion: GradleVersion) {
|
||||||
|
project("kt-51940-hmpp-resolves-configurations-during-configuration", gradleVersion = gradleVersion) {
|
||||||
|
build("assemble", "--dry-run") {
|
||||||
|
assertOutputDoesNotContain("Configuration Resolved")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun TestProject.testDependencyTransformations(
|
private fun TestProject.testDependencyTransformations(
|
||||||
subproject: String? = null,
|
subproject: String? = null,
|
||||||
|
|||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
mavenLocal()
|
||||||
|
mavenCentral()
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
targetHierarchy.default()
|
||||||
|
|
||||||
|
jvm()
|
||||||
|
linuxX64()
|
||||||
|
linuxArm64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup configuration resolution hook
|
||||||
|
// Report configurations that is going to be resolved before the task graph is ready
|
||||||
|
val isResolutionAllowed = AtomicBoolean(false)
|
||||||
|
project.gradle.taskGraph.whenReady { isResolutionAllowed.set(true) }
|
||||||
|
|
||||||
|
configurations.all {
|
||||||
|
incoming.beforeResolve {
|
||||||
|
if (isResolutionAllowed.get()) return@beforeResolve
|
||||||
|
println("!!!Configuration Resolved: $name")
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
rootProject.name = "test-project"
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package lib
|
||||||
|
|
||||||
|
fun commonMain() = "common"
|
||||||
+3
-2
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
|||||||
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
import org.jetbrains.kotlin.gradle.targets.native.internal.*
|
||||||
import org.jetbrains.kotlin.gradle.tasks.*
|
import org.jetbrains.kotlin.gradle.tasks.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
import org.jetbrains.kotlin.gradle.utils.filesProvider
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.getResolvedArtifactsCompat
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics
|
||||||
|
|
||||||
@@ -327,13 +328,13 @@ class KotlinMetadataTargetConfigurator :
|
|||||||
|
|
||||||
val transformationTask = project.locateOrRegisterMetadataDependencyTransformationTask(sourceSet)
|
val transformationTask = project.locateOrRegisterMetadataDependencyTransformationTask(sourceSet)
|
||||||
|
|
||||||
val artifacts = sourceSet.internal.resolvableMetadataConfiguration.incoming.artifacts
|
val artifacts = sourceSet.internal.resolvableMetadataConfiguration.incoming.artifacts.getResolvedArtifactsCompat(project)
|
||||||
|
|
||||||
// Metadata from visible source sets within dependsOn closure
|
// Metadata from visible source sets within dependsOn closure
|
||||||
compilation.compileDependencyFiles += sourceSet.dependsOnClassesDirs
|
compilation.compileDependencyFiles += sourceSet.dependsOnClassesDirs
|
||||||
|
|
||||||
// Requested dependencies that are not Multiplatform Libraries. for example stdlib-common
|
// Requested dependencies that are not Multiplatform Libraries. for example stdlib-common
|
||||||
compilation.compileDependencyFiles += project.filesProvider { artifacts.filterNot { it.isMpp }.map { it.file } }
|
compilation.compileDependencyFiles += project.files(artifacts.map { it.filterNot { it.isMpp }.map { it.file } })
|
||||||
|
|
||||||
// Transformed Multiplatform Libraries based on source set visibility
|
// Transformed Multiplatform Libraries based on source set visibility
|
||||||
compilation.compileDependencyFiles += project.files(transformationTask.map { it.allTransformedLibraries })
|
compilation.compileDependencyFiles += project.files(transformationTask.map { it.allTransformedLibraries })
|
||||||
|
|||||||
+13
@@ -19,12 +19,15 @@ package org.jetbrains.kotlin.gradle.utils
|
|||||||
import org.gradle.api.GradleException
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.Task
|
import org.gradle.api.Task
|
||||||
|
import org.gradle.api.artifacts.ArtifactCollection
|
||||||
|
import org.gradle.api.artifacts.result.ResolvedArtifactResult
|
||||||
import org.gradle.api.file.ArchiveOperations
|
import org.gradle.api.file.ArchiveOperations
|
||||||
import org.gradle.api.file.CopySpec
|
import org.gradle.api.file.CopySpec
|
||||||
import org.gradle.api.file.FileSystemOperations
|
import org.gradle.api.file.FileSystemOperations
|
||||||
import org.gradle.api.file.FileTree
|
import org.gradle.api.file.FileTree
|
||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
import org.gradle.api.internal.tasks.testing.TestDescriptorInternal
|
import org.gradle.api.internal.tasks.testing.TestDescriptorInternal
|
||||||
|
import org.gradle.api.provider.Provider
|
||||||
import org.gradle.api.tasks.WorkResult
|
import org.gradle.api.tasks.WorkResult
|
||||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
||||||
import org.gradle.api.tasks.testing.TestDescriptor
|
import org.gradle.api.tasks.testing.TestDescriptor
|
||||||
@@ -113,3 +116,13 @@ internal fun Task.doNotTrackStateCompat(because: String) {
|
|||||||
doNotTrackState(because)
|
doNotTrackState(because)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [ArtifactCollection.getResolvedArtifacts] is available after 7.4 (inclusive)
|
||||||
|
*/
|
||||||
|
internal fun ArtifactCollection.getResolvedArtifactsCompat(project: Project): Provider<Set<ResolvedArtifactResult>> =
|
||||||
|
if (GradleVersion.current() >= GradleVersion.version("7.4")) {
|
||||||
|
resolvedArtifacts
|
||||||
|
} else {
|
||||||
|
project.provider { artifacts }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user