diff --git a/build.gradle b/build.gradle index 99325da..e04c8f8 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,8 @@ group = 'com.hypherionmc.modutils' version = "${version_base}.${version_patch}" description = "Gradle plugin to merge multiloader/architectury multiplatform mods into a single jar file" archivesBaseName = 'ModFusioner' -java.toolchain.languageVersion = JavaLanguageVersion.of(8) +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 if (System.getenv('BUILD_NUMBER') != null) { version = "${version_base}." + System.getenv('BUILD_NUMBER') @@ -32,17 +33,17 @@ repositories { dependencies { implementation gradleApi() + testImplementation 'org.jetbrains:annotations:24.0.0' // Shaded Deps shadeMe 'org.jetbrains:annotations:24.0.1' shadeMe 'commons-io:commons-io:2.11.0' - shadeMe('me.lucko:jar-relocator:1.5') { + shadeMe('com.hypherionmc:jarmanager:1.0.3') { exclude group: 'org.ow2.asm' } shadeMe 'org.ow2.asm:asm:9.3' shadeMe 'org.ow2.asm:asm-commons:9.3' - shadeMe "fr.stevecohen.jarmanager:JarManager:0.5.0" shadeMe 'org.apache.commons:commons-compress:1.24.0' compileOnly 'org.projectlombok:lombok:1.18.30' diff --git a/gradle.properties b/gradle.properties index 291a024..92ff24b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ version_base=1.0 -version_patch=6 \ No newline at end of file +version_patch=7 \ No newline at end of file diff --git a/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java b/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java index b2d15a1..8a347f7 100644 --- a/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java +++ b/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java @@ -9,15 +9,13 @@ */ package com.hypherionmc.modfusioner.actions; +import com.hypherionmc.jarmanager.JarManager; +import com.hypherionmc.jarrelocator.Relocation; import com.hypherionmc.modfusioner.Constants; import com.hypherionmc.modfusioner.plugin.FusionerExtension; import com.hypherionmc.modfusioner.utils.FileTools; -import fr.stevecohen.jarmanager.JarPacker; -import fr.stevecohen.jarmanager.JarUnpacker; import lombok.RequiredArgsConstructor; import lombok.Setter; -import me.lucko.jarrelocator.JarRelocator; -import me.lucko.jarrelocator.Relocation; import org.apache.commons.io.FileUtils; import java.io.File; @@ -26,7 +24,6 @@ import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -69,6 +66,8 @@ public class JarMergeAction { private final Map ignoredDuplicateRelocations = new HashMap<>(); private final Map removeDuplicateRelocationResources = new HashMap<>(); private final List relocations = new ArrayList<>(); + JarManager jarManager = JarManager.getInstance(); + // Settings private final String group; @@ -133,20 +132,24 @@ public class JarMergeAction { // Extract the input jars to their processing directories logger.lifecycle("Unpacking input jars"); - JarUnpacker jarUnpacker = new JarUnpacker(); + if (FileTools.exists(forgeInput)) { - jarUnpacker.unpack(forgeInput.getAbsolutePath(), forgeTemp.getAbsolutePath()); + jarManager.unpackJar(forgeInput, forgeTemp); } if (FileTools.exists(fabricInput)) { - jarUnpacker.unpack(fabricInput.getAbsolutePath(), fabricTemp.getAbsolutePath()); + jarManager.unpackJar(fabricInput, fabricTemp); } if (FileTools.exists(quiltInput)) { - jarUnpacker.unpack(quiltInput.getAbsolutePath(), quiltTemp.getAbsolutePath()); + jarManager.unpackJar(quiltInput, quiltTemp); } customTemps.forEach((key, value) -> value.forEach((k, v) -> { if (FileTools.exists(k)) { - jarUnpacker.unpack(k.getAbsolutePath(), v.getAbsolutePath()); + try { + jarManager.unpackJar(k, v); + } catch (IOException e) { + throw new RuntimeException(e); + } } })); @@ -174,12 +177,7 @@ public class JarMergeAction { // Repack the fully processed jars into a single jar logger.lifecycle("Fusing jars into single jar"); - JarPacker jarPacker = new JarPacker(); - jarPacker.pack(mergedTemp.getAbsolutePath(), outJar.getAbsolutePath()); - - // Relocate duplicate packages that have been de-duplicated - logger.lifecycle("Finishing up"); - relocateJar(outJar, new File(tempDir, "relocate.jar")); + jarManager.remapAndPack(mergedTemp, outJar, relocations); try { Files.setPosixFilePermissions(outJar.toPath(), Constants.filePerms); @@ -193,6 +191,7 @@ public class JarMergeAction { * @throws IOException - Thrown if an IO error occurs */ public void clean() throws IOException { + logger.lifecycle("Finishing up"); FileUtils.deleteQuietly(tempDir); } @@ -202,20 +201,6 @@ public class JarMergeAction { * ================================================================================================================ */ - /** - * Relocate, or rename packages that have been deduplicated and moved around - * @param mergedJar - Input jar - * @param mergedOutputJar - Temporary output jar - * @throws IOException - Thrown if an IO exception occurs - */ - private void relocateJar(File mergedJar, File mergedOutputJar) throws IOException { - JarRelocator jarRelocator = new JarRelocator(mergedJar, mergedOutputJar, relocations); - jarRelocator.run(); - - Files.move(mergedOutputJar.toPath(), mergedJar.toPath(), StandardCopyOption.REPLACE_EXISTING); - if (mergedOutputJar.exists()) mergedOutputJar.delete(); - } - /** * Process input jars to relocate them internally to their final package names * @throws IOException - Thrown if an IO error occurs @@ -272,8 +257,7 @@ public class JarMergeAction { jarRelocations.add(new Relocation(architectury.get(), target + "." + architectury.get())); } - JarRelocator jarRelocator = new JarRelocator(jarFile, remappedJar, jarRelocations); - jarRelocator.run(); + jarManager.remapJar(jarFile, remappedJar, jarRelocations); switch (target) { case "forge": @@ -326,9 +310,7 @@ public class JarMergeAction { customRelocations.add(new Relocation(architectury.get(), name + "." + architectury.get())); } - JarRelocator customRelocator = new JarRelocator(jarFile, remappedJar, customRelocations); - customRelocator.run(); - + jarManager.remapJar(jarFile, remappedJar, customRelocations); customInputs.replace(configuration, jarFile, remappedJar); } @@ -354,8 +336,6 @@ public class JarMergeAction { } } } - - logger.lifecycle("Remapping Finished"); } /**