diff --git a/buildSrc/src/main/kotlin/embeddable.kt b/buildSrc/src/main/kotlin/embeddable.kt index 8f7c6bc7cfc..e2e5a684833 100644 --- a/buildSrc/src/main/kotlin/embeddable.kt +++ b/buildSrc/src/main/kotlin/embeddable.kt @@ -1,10 +1,8 @@ @file:Suppress("unused") // usages in build scripts are not tracked properly import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import org.gradle.api.GradleException import org.gradle.api.Project import org.gradle.api.file.DuplicatesStrategy -import org.gradle.api.tasks.bundling.Zip import org.gradle.jvm.tasks.Jar import org.gradle.kotlin.dsl.task import org.gradle.kotlin.dsl.* @@ -104,23 +102,22 @@ fun Project.embeddableCompilerDummyForDependenciesRewriting(taskName: String = " } } -fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Zip, body: Jar.() -> Unit = {}): Jar { - val originalFiles by lazy { - val jarContents = zipTree(originalJarTask.outputs.files.singleFile).files - val basePath = jarContents.find { it.name == "MANIFEST.MF" }?.parentFile?.parentFile ?: throw GradleException("cannot determine the jar root dir") - jarContents.map { it.relativeTo(basePath).path }.toSet() +fun Project.rewriteDepsToShadedJar(originalJarTask: Jar, shadowJarTask: Jar, body: Jar.() -> Unit = {}): Jar { + originalJarTask.apply { + classifier = "original" } - return task("rewrittenDepsJar") { - originalJarTask.apply { - classifier = "original" - } - shadowJarTask.apply { - dependsOn(originalJarTask) - from(originalJarTask)// { include("**") } - classifier = "shadow" - } - dependsOn(shadowJarTask) - from(project.zipTree(shadowJarTask.outputs.files.singleFile)) { include { originalFiles.any { originalFile -> it.file.canonicalPath.endsWith(originalFile) } } } + + val compilerDummyJarFile by lazy { configurations.getAt("compilerDummyJar").singleFile } + + return shadowJarTask.apply { + dependsOn(originalJarTask) + from(originalJarTask)// { include("**") } + + // When Gradle traverses the inputs, reject the shaded compiler JAR, + // which leads to the content of that JAR being excluded as well: + exclude { it.file == compilerDummyJarFile } + + classifier = null body() } }