diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 60cc42ea903..fce51e89e61 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -2654,6 +2654,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt
index 2d9212e5bde..68706cef86c 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8Env.kt
@@ -10,5 +10,6 @@ data class D8Env(
val targetPath: File,
val executablePath: File,
val isWindows: Boolean,
- val downloadUrl: URL
+ val downloadUrl: URL,
+ val ivyDependency: String
)
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt
index 8bfba18a215..8832fee679c 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt
@@ -60,7 +60,8 @@ open class D8RootExtension(@Transient val rootProject: Project) : ConfigurationP
targetPath = targetPath,
executablePath = targetPath.resolve(if (isWindows) "d8.exe" else "d8"),
isWindows = isWindows,
- downloadUrl = URL("${downloadBaseUrl.trimEnd('/')}/$requiredZipName"),
+ downloadUrl = URL(downloadBaseUrl),
+ ivyDependency = "google.d8:v8:${D8Platform.platform}-$edition-$version@zip"
)
}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt
index c057d710687..b35a2b945f3 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootPlugin.kt
@@ -5,16 +5,17 @@
package org.jetbrains.kotlin.gradle.targets.js.d8
-import de.undercouch.gradle.tasks.download.Download
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.BasePlugin
import org.gradle.api.tasks.Copy
+import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
import org.jetbrains.kotlin.gradle.targets.js.MultiplePluginDeclarationDetector
import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootExtension.Companion.EXTENSION_NAME
import org.jetbrains.kotlin.gradle.tasks.CleanDataTask
import org.jetbrains.kotlin.gradle.tasks.registerTask
+
open class D8RootPlugin : Plugin {
override fun apply(project: Project) {
MultiplePluginDeclarationDetector.detect(project)
@@ -27,13 +28,27 @@ open class D8RootPlugin : Plugin {
val settings = project.extensions.create(EXTENSION_NAME, D8RootExtension::class.java, project)
- val downloadTask = project.registerTask("${TASKS_GROUP_NAME}Download") {
- val env = settings.requireConfigured()
+ project.gradle.projectsEvaluated {
+ val downloadUrl = settings.requireConfigured().downloadUrl
+ project.repositories.ivy { repo ->
+ repo.name = "D8 Distributions at $downloadUrl"
+ repo.url = downloadUrl.toURI()
+ repo.patternLayout {
+ it.artifact("[artifact]-[revision].[ext]")
+ }
+ repo.metadataSources { it.artifact() }
+ repo.content { it.includeModule("google.d8", "v8") }
+ }
+ }
+
+ val downloadTask = project.registerTask("${TASKS_GROUP_NAME}Download") {
it.group = TASKS_GROUP_NAME
- it.src(env.downloadUrl)
- it.dest(env.zipPath)
- it.overwrite(false)
it.description = "Download local d8 version"
+
+ val env = settings.requireConfigured()
+ val configuration = project.configurations.detachedConfiguration(project.dependencies.create(env.ivyDependency))
+ it.from(project.provider { configuration.singleFile })
+ it.into(env.zipPath.parentFile)
}
project.registerTask(INSTALL_TASK_NAME) {