[BUG] Fix output jars being larger than they should, and change to JarManager

This commit is contained in:
2023-11-05 18:24:42 +02:00
parent d7a95ba907
commit de3965e144
3 changed files with 22 additions and 41 deletions

View File

@@ -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'

View File

@@ -1,2 +1,2 @@
version_base=1.0
version_patch=6
version_patch=7

View File

@@ -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<String, String> ignoredDuplicateRelocations = new HashMap<>();
private final Map<String, String> removeDuplicateRelocationResources = new HashMap<>();
private final List<Relocation> 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");
}
/**