Gradle: Don't use the deprecated "layout" method for Ivy repos
Issue #KT-30258 fixed
This commit is contained in:
+13
@@ -1303,6 +1303,8 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
build("tasks") {
|
||||
assertSuccessful()
|
||||
assertTrue(output.contains("Kotlin/Native distribution: "))
|
||||
// Check for KT-30258.
|
||||
assertFalse(output.contains("Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0."))
|
||||
}
|
||||
|
||||
build("tasks", "-Pkotlin.native.restrictedDistribution=true") {
|
||||
@@ -1348,6 +1350,17 @@ class NewMultiplatformIT : BaseGradleIT() {
|
||||
assertContains("Project property 'org.jetbrains.kotlin.native.version' is deprecated")
|
||||
}
|
||||
}
|
||||
|
||||
// Gradle 5.0 introduced a new API for Ivy repository layouts.
|
||||
// MPP plugin uses this API to download K/N if Gradle version is >= 5.0.
|
||||
// Check this too (see KT-30258).
|
||||
with(Project("new-mpp-native-libraries", GradleVersionRequired.AtLeast("5.0"))) {
|
||||
build("tasks", "-Pkotlin.native.version=1.3.50-eap-11606") {
|
||||
assertSuccessful()
|
||||
assertTrue(output.contains("Kotlin/Native distribution: "))
|
||||
assertFalse(output.contains("Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0."))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+4
-13
@@ -7,6 +7,7 @@ import org.gradle.api.tasks.OutputDirectory
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||
import org.jetbrains.kotlin.gradle.utils.patternLayoutCompatible
|
||||
import java.io.File
|
||||
import java.net.URI
|
||||
|
||||
@@ -35,14 +36,9 @@ open class NodeJsSetupTask : DefaultTask() {
|
||||
repo.name = "Node Distributions at ${settings.nodeDownloadBaseUrl}"
|
||||
repo.url = URI(settings.nodeDownloadBaseUrl)
|
||||
|
||||
if (isGradleVersionAtLeast(5, 0)) {
|
||||
repo.patternLayout { layout ->
|
||||
configureNodeJsIvyPatternLayout(layout)
|
||||
}
|
||||
} else {
|
||||
repo.layout("pattern") { layout ->
|
||||
configureNodeJsIvyPatternLayout(layout as IvyPatternRepositoryLayout)
|
||||
}
|
||||
repo.patternLayoutCompatible {
|
||||
artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]")
|
||||
ivy("v[revision]/ivy.xml")
|
||||
}
|
||||
repo.metadataSources { it.artifact() }
|
||||
|
||||
@@ -66,11 +62,6 @@ open class NodeJsSetupTask : DefaultTask() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun configureNodeJsIvyPatternLayout(layout: IvyPatternRepositoryLayout) {
|
||||
layout.artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]")
|
||||
layout.ivy("v[revision]/ivy.xml")
|
||||
}
|
||||
|
||||
private fun unpackNodeArchive(archive: File, destination: File) {
|
||||
project.logger.kotlinInfo("Unpacking $archive to $destination")
|
||||
|
||||
|
||||
+4
-3
@@ -6,8 +6,10 @@
|
||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||
package org.jetbrains.kotlin.gradle.utils
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.repositories.ArtifactRepository
|
||||
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
|
||||
import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout
|
||||
import org.gradle.api.file.FileTree
|
||||
import org.gradle.api.logging.Logger
|
||||
@@ -80,9 +82,8 @@ class NativeCompilerDownloader(
|
||||
private fun setupRepo(repoUrl: String): ArtifactRepository {
|
||||
return project.repositories.ivy { repo ->
|
||||
repo.setUrl(repoUrl)
|
||||
repo.layout("pattern") {
|
||||
val layout = it as IvyPatternRepositoryLayout
|
||||
layout.artifact("[artifact]-[revision].[ext]")
|
||||
repo.patternLayoutCompatible {
|
||||
artifact("[artifact]-[revision].[ext]")
|
||||
}
|
||||
repo.metadataSources {
|
||||
it.artifact()
|
||||
|
||||
+14
@@ -16,8 +16,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.utils
|
||||
|
||||
import org.gradle.api.Action
|
||||
import org.gradle.api.GradleException
|
||||
import org.gradle.api.Task
|
||||
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
|
||||
import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout
|
||||
import org.gradle.api.tasks.TaskInputs
|
||||
import org.gradle.api.tasks.TaskOutputs
|
||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
||||
@@ -73,4 +76,15 @@ internal fun AbstractArchiveTask.setArchiveClassifierCompatible(classifierProvid
|
||||
@Suppress("DEPRECATION")
|
||||
classifier = classifierProvider()
|
||||
}
|
||||
}
|
||||
|
||||
internal fun IvyArtifactRepository.patternLayoutCompatible(config: IvyPatternRepositoryLayout.() -> Unit) {
|
||||
if (isGradleVersionAtLeast(5, 0)) {
|
||||
patternLayout(config)
|
||||
} else {
|
||||
// The "layout" method is planned to be removed in Gradle 6.0. Access it using reflection.
|
||||
javaClass
|
||||
.getMethod("layout", String::class.java, Action::class.java)
|
||||
.invoke(this, "pattern", Action<IvyPatternRepositoryLayout> { it.config() })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user