[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(
|
||||
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.tasks.*
|
||||
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.statistics.metrics.BooleanMetrics
|
||||
|
||||
@@ -327,13 +328,13 @@ class KotlinMetadataTargetConfigurator :
|
||||
|
||||
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
|
||||
compilation.compileDependencyFiles += sourceSet.dependsOnClassesDirs
|
||||
|
||||
// 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
|
||||
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.Project
|
||||
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.CopySpec
|
||||
import org.gradle.api.file.FileSystemOperations
|
||||
import org.gradle.api.file.FileTree
|
||||
import org.gradle.api.internal.project.ProjectInternal
|
||||
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.bundling.AbstractArchiveTask
|
||||
import org.gradle.api.tasks.testing.TestDescriptor
|
||||
@@ -113,3 +116,13 @@ internal fun Task.doNotTrackStateCompat(because: String) {
|
||||
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