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") {
|
build("tasks") {
|
||||||
assertSuccessful()
|
assertSuccessful()
|
||||||
assertTrue(output.contains("Kotlin/Native distribution: "))
|
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") {
|
build("tasks", "-Pkotlin.native.restrictedDistribution=true") {
|
||||||
@@ -1348,6 +1350,17 @@ class NewMultiplatformIT : BaseGradleIT() {
|
|||||||
assertContains("Project property 'org.jetbrains.kotlin.native.version' is deprecated")
|
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
|
@Test
|
||||||
|
|||||||
+4
-13
@@ -7,6 +7,7 @@ import org.gradle.api.tasks.OutputDirectory
|
|||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
import org.jetbrains.kotlin.gradle.logging.kotlinInfo
|
||||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.patternLayoutCompatible
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
|
||||||
@@ -35,14 +36,9 @@ open class NodeJsSetupTask : DefaultTask() {
|
|||||||
repo.name = "Node Distributions at ${settings.nodeDownloadBaseUrl}"
|
repo.name = "Node Distributions at ${settings.nodeDownloadBaseUrl}"
|
||||||
repo.url = URI(settings.nodeDownloadBaseUrl)
|
repo.url = URI(settings.nodeDownloadBaseUrl)
|
||||||
|
|
||||||
if (isGradleVersionAtLeast(5, 0)) {
|
repo.patternLayoutCompatible {
|
||||||
repo.patternLayout { layout ->
|
artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]")
|
||||||
configureNodeJsIvyPatternLayout(layout)
|
ivy("v[revision]/ivy.xml")
|
||||||
}
|
|
||||||
} else {
|
|
||||||
repo.layout("pattern") { layout ->
|
|
||||||
configureNodeJsIvyPatternLayout(layout as IvyPatternRepositoryLayout)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
repo.metadataSources { it.artifact() }
|
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) {
|
private fun unpackNodeArchive(archive: File, destination: File) {
|
||||||
project.logger.kotlinInfo("Unpacking $archive to $destination")
|
project.logger.kotlinInfo("Unpacking $archive to $destination")
|
||||||
|
|
||||||
|
|||||||
+4
-3
@@ -6,8 +6,10 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||||
package org.jetbrains.kotlin.gradle.utils
|
package org.jetbrains.kotlin.gradle.utils
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.Project
|
import org.gradle.api.Project
|
||||||
import org.gradle.api.artifacts.repositories.ArtifactRepository
|
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.artifacts.repositories.IvyPatternRepositoryLayout
|
||||||
import org.gradle.api.file.FileTree
|
import org.gradle.api.file.FileTree
|
||||||
import org.gradle.api.logging.Logger
|
import org.gradle.api.logging.Logger
|
||||||
@@ -80,9 +82,8 @@ class NativeCompilerDownloader(
|
|||||||
private fun setupRepo(repoUrl: String): ArtifactRepository {
|
private fun setupRepo(repoUrl: String): ArtifactRepository {
|
||||||
return project.repositories.ivy { repo ->
|
return project.repositories.ivy { repo ->
|
||||||
repo.setUrl(repoUrl)
|
repo.setUrl(repoUrl)
|
||||||
repo.layout("pattern") {
|
repo.patternLayoutCompatible {
|
||||||
val layout = it as IvyPatternRepositoryLayout
|
artifact("[artifact]-[revision].[ext]")
|
||||||
layout.artifact("[artifact]-[revision].[ext]")
|
|
||||||
}
|
}
|
||||||
repo.metadataSources {
|
repo.metadataSources {
|
||||||
it.artifact()
|
it.artifact()
|
||||||
|
|||||||
+14
@@ -16,8 +16,11 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.utils
|
package org.jetbrains.kotlin.gradle.utils
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
import org.gradle.api.GradleException
|
import org.gradle.api.GradleException
|
||||||
import org.gradle.api.Task
|
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.TaskInputs
|
||||||
import org.gradle.api.tasks.TaskOutputs
|
import org.gradle.api.tasks.TaskOutputs
|
||||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
import org.gradle.api.tasks.bundling.AbstractArchiveTask
|
||||||
@@ -74,3 +77,14 @@ internal fun AbstractArchiveTask.setArchiveClassifierCompatible(classifierProvid
|
|||||||
classifier = classifierProvider()
|
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