From f11fc6eb47369730544ce7acc377df158976fd7c Mon Sep 17 00:00:00 2001 From: Hakan Mehmed Date: Wed, 31 Dec 2025 06:08:24 +0000 Subject: [PATCH] Upgrade to shadowjar plugin 9.3.0 --- build.gradle.kts | 2 +- kotlin-analysis-api/build.gradle.kts | 4 +++ .../build.gradle.kts | 26 +++++++++++++------ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4d14fcaf7d..c3795cf58e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,7 @@ plugins { kotlin("jvm") id("io.github.gradle-nexus.publish-plugin") version "2.0.0" // Adding plugins used in multiple places to the classpath for centralized version control - id("com.gradleup.shadow") version "8.3.9" apply false + id("com.gradleup.shadow") version "9.3.1" apply false id("org.jetbrains.dokka") version "1.9.20" apply false id("com.android.lint") version "8.13.0" apply false } diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index f9b2a5fdf8..b9b026e8e1 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -179,7 +179,11 @@ tasks.withType().configureEach { exclude("kotlin/**") exclude("kotlinx/coroutines/**") archiveClassifier.set("") + duplicatesStrategy = DuplicatesStrategy.EXCLUDE mergeServiceFiles() + filesMatching("META-INF/services/**") { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + } } abstract class ValidateShadowJar : DefaultTask() { diff --git a/symbol-processing-aa-embeddable/build.gradle.kts b/symbol-processing-aa-embeddable/build.gradle.kts index 7282755258..a54471b89a 100644 --- a/symbol-processing-aa-embeddable/build.gradle.kts +++ b/symbol-processing-aa-embeddable/build.gradle.kts @@ -1,10 +1,10 @@ +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowCopyAction.Companion.CONSTANT_TIME_FOR_ZIP_ENTRIES import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.ResourceTransformer import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext import org.apache.tools.zip.ZipEntry import org.apache.tools.zip.ZipOutputStream import org.gradle.jvm.tasks.Jar -import java.io.InputStreamReader import java.util.zip.ZipFile evaluationDependsOn(":kotlin-analysis-api") @@ -66,15 +66,15 @@ val prefixesToRelocate = listOf( Pair(it, "ksp." + it) } -class AAServiceTransformer : Transformer { +class AAServiceTransformer : ResourceTransformer { private val entries = HashMap() // Names of extension points needs to be relocated, because ShadowJar does that, too. private val regex = Regex("\"((org\\.jetbrains\\.kotlin\\.|com\\.intellij\\.).+)\"") override fun canTransformResource(element: FileTreeElement): Boolean { - return element.name.startsWith("META-INF/analysis-api/") || - element.name == "META-INF/extensions/compiler.xml" + return element.relativePath.pathString.startsWith("META-INF/analysis-api/") || + element.relativePath.pathString == "META-INF/extensions/compiler.xml" } override fun getName(): String { @@ -88,7 +88,7 @@ class AAServiceTransformer : Transformer { override fun modifyOutputStream(os: ZipOutputStream, preserveFileTimestamps: Boolean) { fun putOneEntry(path: String, content: String) { val entry = ZipEntry(path) - entry.time = TransformerContext.getEntryTimestamp(preserveFileTimestamps, entry.time) + entry.time = if (preserveFileTimestamps) entry.time else CONSTANT_TIME_FOR_ZIP_ENTRIES os.putNextEntry(entry) os.write(content.toByteArray()) os.closeEntry() @@ -120,12 +120,12 @@ class AAServiceTransformer : Transformer { override fun transform(context: TransformerContext) { val path = context.path - val content = InputStreamReader(context.`is`).readText() + val content = context.inputStream.reader().readText() entries[path] = content } } -tasks.withType(ShadowJar::class.java).configureEach { +tasks.withType().configureEach { archiveClassifier.set("") // ShadowJar picks up the `compile` configuration by default and pulls stdlib in. // Therefore, specifying another configuration instead. @@ -151,7 +151,17 @@ tasks.withType(ShadowJar::class.java).configureEach { excludeEfficiently("org.checkerframework.checker.nullness.qual.Nullable") } } + duplicatesStrategy = DuplicatesStrategy.EXCLUDE mergeServiceFiles() + filesMatching( + listOf( + "META-INF/services/**", + "META-INF/analysis-api/", + "META-INF/extensions/compiler.xml", + ) + ) { + duplicatesStrategy = DuplicatesStrategy.INCLUDE + } exclude("META-INF/compiler.version") exclude("META-INF/*.kotlin_module") exclude("javax/**")