From b8cb9cc1aa578550637b51dcdca356c82cbf6581 Mon Sep 17 00:00:00 2001 From: comp500 Date: Sun, 17 Jul 2022 00:30:22 +0100 Subject: [PATCH] Repack jar with Gradle so MANIFEST.MF is at the start packwiz-installer-bootstrap relies on reading the manifest; breaking this means the update will run on every launch! --- build.gradle.kts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4b4a27c..2d07423 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ repositories { } val r8 by configurations.creating -val shrinkJarOutput by configurations.creating { +val distJarOutput by configurations.creating { isCanBeResolved = false isCanBeConsumed = true @@ -104,15 +104,27 @@ val shrinkJar by tasks.registering(JavaExec::class) { ) } +// MANIFEST.MF must be one of the first 2 entries in the zip for JarInputStream to see it +// Gradle's JAR creation handles this whereas R8 doesn't, so the dist JAR is repacked +val distJar by tasks.registering(Jar::class) { + from(shrinkJar.map { zipTree(it.outputs.files.singleFile) }) + archiveClassifier.set("all-repacked") + manifest { + from(shrinkJar.map { zipTree(it.outputs.files.singleFile).matching { + include("META-INF/MANIFEST.MF") + }.singleFile }) + } +} + artifacts { - add("shrinkJarOutput", shrinkJar) { + add("distJarOutput", distJar) { classifier = "dist" } } // Used for vscode launch.json val copyJar by tasks.registering(Copy::class) { - from(shrinkJar) + from(distJar) rename("packwiz-installer-(.*)\\.jar", "packwiz-installer.jar") into(layout.buildDirectory.dir("dist")) outputs.file(layout.buildDirectory.dir("dist").map { it.file("packwiz-installer.jar") }) @@ -155,7 +167,7 @@ tasks.compileTestKotlin { } val javaComponent = components["java"] as AdhocComponentWithVariants -javaComponent.addVariantsFromConfiguration(shrinkJarOutput) { +javaComponent.addVariantsFromConfiguration(distJarOutput) { mapToMavenScope("runtime") mapToOptional() }