Allow either file or task inputs
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package com.hypherionmc.modfusioner.actions;
|
||||
|
||||
import com.hypherionmc.modfusioner.Constants;
|
||||
import com.hypherionmc.modfusioner.plugin.ModFusionerExtension;
|
||||
import com.hypherionmc.modfusioner.plugin.FusionerExtension;
|
||||
import com.hypherionmc.modfusioner.utils.FileTools;
|
||||
import fr.stevecohen.jarmanager.JarPacker;
|
||||
import fr.stevecohen.jarmanager.JarUnpacker;
|
||||
@@ -37,7 +37,7 @@ public class JarMergeAction {
|
||||
@Setter private File forgeInput;
|
||||
@Setter private File fabricInput;
|
||||
@Setter private File quiltInput;
|
||||
private final Map<ModFusionerExtension.CustomConfiguration, File> customInputs;
|
||||
private final Map<FusionerExtension.CustomConfiguration, File> customInputs;
|
||||
|
||||
// Relocations
|
||||
@Setter private Map<String, String> forgeRelocations;
|
||||
@@ -48,7 +48,7 @@ public class JarMergeAction {
|
||||
@Setter private List<String> forgeMixins;
|
||||
|
||||
// Custom
|
||||
private Map<ModFusionerExtension.CustomConfiguration, Map<File, File>> customTemps;
|
||||
private Map<FusionerExtension.CustomConfiguration, Map<File, File>> customTemps;
|
||||
|
||||
// Relocations
|
||||
private final List<String> ignoredPackages;
|
||||
@@ -143,7 +143,7 @@ public class JarMergeAction {
|
||||
FileTools.moveDirectory(fabricTemp, mergedTemp);
|
||||
FileTools.moveDirectory(quiltTemp, mergedTemp);
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<File, File> entry2 : entry.getValue().entrySet()) {
|
||||
FileTools.moveDirectory(entry2.getValue(), mergedTemp);
|
||||
}
|
||||
@@ -213,7 +213,7 @@ public class JarMergeAction {
|
||||
remapJar(fabricInput, "fabric", fabricRelocations);
|
||||
remapJar(quiltInput, "quilt", quiltRelocations);
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, File> entry : customInputs.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, File> entry : customInputs.entrySet()) {
|
||||
if (FileTools.exists(entry.getValue())) {
|
||||
remapCustomJar(entry.getKey(), entry.getValue());
|
||||
}
|
||||
@@ -281,7 +281,7 @@ public class JarMergeAction {
|
||||
* @param jarFile - The input jar of the custom project to be processed
|
||||
* @throws IOException - Thrown if an io exception occurs
|
||||
*/
|
||||
private void remapCustomJar(ModFusionerExtension.CustomConfiguration configuration, File jarFile) throws IOException {
|
||||
private void remapCustomJar(FusionerExtension.CustomConfiguration configuration, File jarFile) throws IOException {
|
||||
String name = configuration.getProjectName();
|
||||
File remappedJar = FileTools.createOrReCreateF(new File(tempDir, "tempCustomInMerging_" + name + ".jar"));
|
||||
|
||||
@@ -331,7 +331,7 @@ public class JarMergeAction {
|
||||
remapJarResources(fabricInput, "fabric", fabricTemps, fabricRelocations);
|
||||
remapJarResources(quiltInput, "quilt", quiltTemps, quiltRelocations);
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<File, File> entry2 : entry.getValue().entrySet()) {
|
||||
if (entry2.getKey() != null && entry2.getKey().exists()) {
|
||||
File customTemps = entry2.getValue();
|
||||
@@ -449,7 +449,7 @@ public class JarMergeAction {
|
||||
if (FileTools.exists(quiltInput)) quiltManifest.read(fileInputStream = new FileInputStream(new File(quiltTemp, "META-INF/MANIFEST.MF")));
|
||||
if (fileInputStream != null) fileInputStream.close();
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<File, File> entry2 : entry.getValue().entrySet()) {
|
||||
Manifest manifest = new Manifest();
|
||||
if (FileTools.exists(entry2.getKey())) {
|
||||
@@ -514,7 +514,7 @@ public class JarMergeAction {
|
||||
if (FileTools.exists(fabricInput)) new File(fabricTemp, "META-INF/MANIFEST.MF").delete();
|
||||
if (FileTools.exists(quiltInput)) new File(quiltTemp, "META-INF/MANIFEST.MF").delete();
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<File, File> entry2 : entry.getValue().entrySet()) {
|
||||
if (FileTools.exists(entry2.getKey())) new File(entry2.getValue(), "META-INF/MANIFEST.MF").delete();
|
||||
}
|
||||
@@ -555,7 +555,7 @@ public class JarMergeAction {
|
||||
removeDuplicateRelocationResources.put("quilt/" + duplicatePath, duplicatePath);
|
||||
}
|
||||
|
||||
for (Map.Entry<ModFusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<FusionerExtension.CustomConfiguration, Map<File, File>> entry : customTemps.entrySet()) {
|
||||
for (Map.Entry<File, File> entry2 : entry.getValue().entrySet()) {
|
||||
if (FileTools.exists(entry2.getKey())) {
|
||||
String name = entry.getKey().getProjectName();
|
||||
|
@@ -6,55 +6,71 @@ import lombok.Setter;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author HypherionSA
|
||||
* Main Plugin Extension allowing users to configure the plugin
|
||||
*/
|
||||
public class ModFusionerExtension {
|
||||
public class FusionerExtension {
|
||||
|
||||
// Group, or package names that will be used for the final jar
|
||||
@Getter @Setter
|
||||
String group;
|
||||
@Getter
|
||||
@Setter
|
||||
String packageGroup;
|
||||
|
||||
// The name of the final jar
|
||||
@Getter @Setter
|
||||
String outJarName;
|
||||
String mergedJarName;
|
||||
|
||||
// Duplicate packages that fill be de-duplicated upon merge
|
||||
// The name of the final jar
|
||||
@Getter @Setter
|
||||
String jarVersion;
|
||||
|
||||
// Duplicate packages that will be de-duplicated upon merge
|
||||
@Getter
|
||||
List<String> duplicateRelocations;
|
||||
|
||||
// The output directory for the merged jar
|
||||
@Getter @Setter
|
||||
String outputDir = "fused";
|
||||
String outputDirectory;
|
||||
|
||||
// Forge Project Configuration
|
||||
@Getter @Setter
|
||||
ForgeConfiguration forgeConfiguration;
|
||||
FusionerExtension.ForgeConfiguration forgeConfiguration;
|
||||
|
||||
// Fabric Project Configuration
|
||||
@Getter @Setter
|
||||
FabricConfiguration fabricConfiguration;
|
||||
FusionerExtension.FabricConfiguration fabricConfiguration;
|
||||
|
||||
// Quilt Project Configuration
|
||||
@Getter @Setter
|
||||
QuiltConfiguration quiltConfiguration;
|
||||
FusionerExtension.QuiltConfiguration quiltConfiguration;
|
||||
|
||||
// Custom Project Configurations
|
||||
@Getter
|
||||
List<CustomConfiguration> customConfigurations = new ArrayList<>();
|
||||
List<FusionerExtension.CustomConfiguration> customConfigurations = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* Main extension entry point
|
||||
*/
|
||||
public ModFusionerExtension() {
|
||||
if (group == null || group.isEmpty()) {
|
||||
public FusionerExtension() {
|
||||
if (packageGroup == null || packageGroup.isEmpty()) {
|
||||
if (ModFusionerPlugin.rootProject.hasProperty("group") && ModFusionerPlugin.rootProject.property("group") != null) {
|
||||
group = ModFusionerPlugin.rootProject.property("group").toString();
|
||||
packageGroup = ModFusionerPlugin.rootProject.property("group").toString();
|
||||
} else {
|
||||
ModFusionerPlugin.logger.error("\"group\" is not defined and cannot be set automatically");
|
||||
}
|
||||
}
|
||||
|
||||
if (mergedJarName == null || mergedJarName.isEmpty()) {
|
||||
mergedJarName = "MergedJar";
|
||||
}
|
||||
|
||||
if (jarVersion == null || jarVersion.isEmpty()) {
|
||||
if (ModFusionerPlugin.rootProject.hasProperty("version") && ModFusionerPlugin.rootProject.property("version") != null) {
|
||||
jarVersion = ModFusionerPlugin.rootProject.property("version").toString();
|
||||
} else {
|
||||
jarVersion = "1.0";
|
||||
}
|
||||
}
|
||||
|
||||
if (outputDirectory == null || outputDirectory.isEmpty())
|
||||
outputDirectory = "artifacts/fused";
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,8 +94,8 @@ public class ModFusionerExtension {
|
||||
/**
|
||||
* Set up the forge project configurations
|
||||
*/
|
||||
public ForgeConfiguration forge(Closure<ForgeConfiguration> closure) {
|
||||
forgeConfiguration = new ForgeConfiguration();
|
||||
public FusionerExtension.ForgeConfiguration forge(Closure<FusionerExtension.ForgeConfiguration> closure) {
|
||||
forgeConfiguration = new FusionerExtension.ForgeConfiguration();
|
||||
ModFusionerPlugin.rootProject.configure(forgeConfiguration, closure);
|
||||
return forgeConfiguration;
|
||||
}
|
||||
@@ -87,8 +103,8 @@ public class ModFusionerExtension {
|
||||
/**
|
||||
* Set up the fabric project configurations
|
||||
*/
|
||||
public FabricConfiguration fabric(Closure<FabricConfiguration> closure) {
|
||||
fabricConfiguration = new FabricConfiguration();
|
||||
public FusionerExtension.FabricConfiguration fabric(Closure<FusionerExtension.FabricConfiguration> closure) {
|
||||
fabricConfiguration = new FusionerExtension.FabricConfiguration();
|
||||
ModFusionerPlugin.rootProject.configure(fabricConfiguration, closure);
|
||||
return fabricConfiguration;
|
||||
}
|
||||
@@ -96,8 +112,8 @@ public class ModFusionerExtension {
|
||||
/**
|
||||
* Set up the quilt project configurations
|
||||
*/
|
||||
public QuiltConfiguration quilt(Closure<QuiltConfiguration> closure) {
|
||||
quiltConfiguration = new QuiltConfiguration();
|
||||
public FusionerExtension.QuiltConfiguration quilt(Closure<FusionerExtension.QuiltConfiguration> closure) {
|
||||
quiltConfiguration = new FusionerExtension.QuiltConfiguration();
|
||||
ModFusionerPlugin.rootProject.configure(quiltConfiguration, closure);
|
||||
return quiltConfiguration;
|
||||
}
|
||||
@@ -105,8 +121,8 @@ public class ModFusionerExtension {
|
||||
/**
|
||||
* Set up custom project configurations
|
||||
*/
|
||||
public CustomConfiguration custom(Closure<CustomConfiguration> closure) {
|
||||
CustomConfiguration customConfiguration = new CustomConfiguration();
|
||||
public FusionerExtension.CustomConfiguration custom(Closure<FusionerExtension.CustomConfiguration> closure) {
|
||||
FusionerExtension.CustomConfiguration customConfiguration = new FusionerExtension.CustomConfiguration();
|
||||
ModFusionerPlugin.rootProject.configure(customConfiguration, closure);
|
||||
|
||||
if (customConfiguration.getProjectName() == null || customConfiguration.getProjectName().isEmpty()) {
|
||||
@@ -127,7 +143,11 @@ public class ModFusionerExtension {
|
||||
|
||||
// The file that will be used as the input
|
||||
@Getter @Setter
|
||||
String jarLocation;
|
||||
String inputFile;
|
||||
|
||||
// The name of the task to run to get the input file
|
||||
@Getter @Setter
|
||||
String inputTaskName;
|
||||
|
||||
// Packages that should be relocated, instead of duplicated
|
||||
@Getter
|
||||
@@ -166,7 +186,11 @@ public class ModFusionerExtension {
|
||||
|
||||
// The file that will be used as the input
|
||||
@Getter @Setter
|
||||
String jarLocation;
|
||||
String inputFile;
|
||||
|
||||
// The name of the task to run to get the input file
|
||||
@Getter @Setter
|
||||
String inputTaskName;
|
||||
|
||||
// Packages that should be relocated, instead of duplicated
|
||||
@Getter
|
||||
@@ -193,7 +217,11 @@ public class ModFusionerExtension {
|
||||
|
||||
// The file that will be used as the input
|
||||
@Getter @Setter
|
||||
String jarLocation;
|
||||
String inputFile;
|
||||
|
||||
// The name of the task to run to get the input file
|
||||
@Getter @Setter
|
||||
String inputTaskName;
|
||||
|
||||
// Packages that should be relocated, instead of duplicated
|
||||
@Getter
|
||||
@@ -220,7 +248,11 @@ public class ModFusionerExtension {
|
||||
|
||||
// The file that will be used as the input
|
||||
@Getter @Setter
|
||||
String jarLocation;
|
||||
String inputFile;
|
||||
|
||||
// The name of the task to run to get the input file
|
||||
@Getter @Setter
|
||||
String inputTaskName;
|
||||
|
||||
// Packages that should be relocated, instead of duplicated
|
||||
@Getter
|
||||
@@ -235,4 +267,5 @@ public class ModFusionerExtension {
|
||||
this.relocations.put(from, to);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -1,10 +1,13 @@
|
||||
package com.hypherionmc.modfusioner.plugin;
|
||||
|
||||
import com.hypherionmc.modfusioner.Constants;
|
||||
import com.hypherionmc.modfusioner.task.FuseJarsTask;
|
||||
import com.hypherionmc.modfusioner.task.JarFuseTask;
|
||||
import org.gradle.api.Plugin;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.Task;
|
||||
import org.gradle.api.logging.Logger;
|
||||
import org.gradle.api.tasks.TaskProvider;
|
||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
|
||||
|
||||
/**
|
||||
* @author HypherionSA
|
||||
@@ -14,18 +17,101 @@ public class ModFusionerPlugin implements Plugin<Project> {
|
||||
|
||||
public static Project rootProject;
|
||||
public static Logger logger;
|
||||
public static ModFusionerExtension modFusionerExtension;
|
||||
public static FusionerExtension modFusionerExtension;
|
||||
|
||||
@Override
|
||||
public void apply(Project project) {
|
||||
rootProject = project;
|
||||
// We only want to apply the project to the Root project
|
||||
if (project != project.getRootProject())
|
||||
return;
|
||||
|
||||
rootProject = project.getRootProject();
|
||||
logger = project.getLogger();
|
||||
|
||||
modFusionerExtension = rootProject.getExtensions().create(Constants.EXTENSION_NAME, ModFusionerExtension.class);
|
||||
// Register the extension
|
||||
modFusionerExtension = rootProject.getExtensions().create(Constants.EXTENSION_NAME, FusionerExtension.class);
|
||||
|
||||
rootProject.getTasks().register(Constants.TASK_NAME, FuseJarsTask.class).configure(fusioner -> {
|
||||
// Register the task
|
||||
TaskProvider<JarFuseTask> task = rootProject.getTasks().register(Constants.TASK_NAME, JarFuseTask.class);
|
||||
task.configure(fusioner -> {
|
||||
fusioner.setGroup(Constants.TASK_GROUP);
|
||||
fusioner.setDescription("Merge multiple jars into a single jar, for multi mod loader projects");
|
||||
});
|
||||
|
||||
// Check for task dependencies and register them on the main task
|
||||
project.subprojects(cc -> cc.afterEvaluate(ccc -> {
|
||||
if (modFusionerExtension.getForgeConfiguration() != null
|
||||
&& modFusionerExtension.getForgeConfiguration().inputTaskName != null
|
||||
&& !modFusionerExtension.getForgeConfiguration().inputTaskName.isEmpty()) {
|
||||
if (ccc.getName().equals(modFusionerExtension.getForgeConfiguration().getProjectName()))
|
||||
resolveInputTasks(
|
||||
ccc,
|
||||
modFusionerExtension.getForgeConfiguration().getInputTaskName(),
|
||||
modFusionerExtension.getForgeConfiguration().getProjectName(),
|
||||
task
|
||||
);
|
||||
}
|
||||
|
||||
if (modFusionerExtension.getFabricConfiguration() != null
|
||||
&& modFusionerExtension.getFabricConfiguration().inputTaskName != null
|
||||
&& !modFusionerExtension.getFabricConfiguration().inputTaskName.isEmpty()) {
|
||||
if (ccc.getName().equals(modFusionerExtension.getFabricConfiguration().getProjectName()))
|
||||
resolveInputTasks(
|
||||
ccc,
|
||||
modFusionerExtension.getFabricConfiguration().getInputTaskName(),
|
||||
modFusionerExtension.getFabricConfiguration().getProjectName(),
|
||||
task
|
||||
);
|
||||
}
|
||||
|
||||
if (modFusionerExtension.getQuiltConfiguration() != null
|
||||
&& modFusionerExtension.getQuiltConfiguration().inputTaskName != null
|
||||
&& !modFusionerExtension.getQuiltConfiguration().inputTaskName.isEmpty()) {
|
||||
if (ccc.getName().equals(modFusionerExtension.getQuiltConfiguration().getProjectName()))
|
||||
resolveInputTasks(
|
||||
ccc,
|
||||
modFusionerExtension.getQuiltConfiguration().getInputTaskName(),
|
||||
modFusionerExtension.getQuiltConfiguration().getProjectName(),
|
||||
task
|
||||
);
|
||||
}
|
||||
|
||||
if (modFusionerExtension.getCustomConfigurations() != null && !modFusionerExtension.getCustomConfigurations().isEmpty()) {
|
||||
modFusionerExtension.getCustomConfigurations().forEach(c -> {
|
||||
if (ccc.getName().equals(c.getProjectName()) && c.getInputTaskName() != null && !c.getInputTaskName().isEmpty())
|
||||
resolveInputTasks(ccc, c.getInputTaskName(), c.getProjectName(), task);
|
||||
});
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to locate the correct task to run on the subproject
|
||||
* @param project - Sub project being processed
|
||||
* @param inTask - The name of the task that will be run
|
||||
* @param inProject - The name of the project the task is on
|
||||
* @param mainTask - The FuseJars task
|
||||
*/
|
||||
private void resolveInputTasks(Project project, Object inTask, String inProject, TaskProvider<JarFuseTask> mainTask) {
|
||||
if (inTask == null)
|
||||
return;
|
||||
|
||||
Task task = null;
|
||||
|
||||
if (inProject == null || inProject.isEmpty())
|
||||
return;
|
||||
|
||||
if (project == null)
|
||||
return;
|
||||
|
||||
if (inTask instanceof String) {
|
||||
task = project.getTasks().getByName((String) inTask);
|
||||
}
|
||||
|
||||
if (!(task instanceof AbstractArchiveTask))
|
||||
return;
|
||||
|
||||
rootProject.task("prepareFuseTask" + project.getName()).dependsOn(":" + project.getName() + ":" + task.getName());
|
||||
mainTask.get().dependsOn("prepareFuseTask" + project.getName());
|
||||
}
|
||||
}
|
||||
|
@@ -2,13 +2,16 @@ package com.hypherionmc.modfusioner.task;
|
||||
|
||||
import com.hypherionmc.modfusioner.Constants;
|
||||
import com.hypherionmc.modfusioner.actions.JarMergeAction;
|
||||
import com.hypherionmc.modfusioner.plugin.ModFusionerExtension;
|
||||
import com.hypherionmc.modfusioner.plugin.FusionerExtension;
|
||||
import com.hypherionmc.modfusioner.plugin.ModFusionerPlugin;
|
||||
import com.hypherionmc.modfusioner.utils.FileChecks;
|
||||
import com.hypherionmc.modfusioner.utils.FileTools;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.gradle.api.DefaultTask;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.tasks.TaskAction;
|
||||
import org.gradle.api.internal.file.copy.CopyAction;
|
||||
import org.gradle.api.tasks.WorkResults;
|
||||
import org.gradle.jvm.tasks.Jar;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
@@ -17,6 +20,7 @@ import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.modFusionerExtension;
|
||||
import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.rootProject;
|
||||
@@ -25,32 +29,50 @@ import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.rootProject;
|
||||
* @author HypherionSA
|
||||
* The main task of the plugin
|
||||
*/
|
||||
public class FuseJarsTask extends DefaultTask {
|
||||
public class JarFuseTask extends Jar {
|
||||
|
||||
@TaskAction
|
||||
void meldJars() throws IOException {
|
||||
// Fixed values
|
||||
private final File mergedJar;
|
||||
private static final AtomicBoolean hasRun = new AtomicBoolean(false);
|
||||
|
||||
public JarFuseTask() {
|
||||
// Set task default values from extension
|
||||
getArchiveBaseName().set(modFusionerExtension.getMergedJarName());
|
||||
getArchiveVersion().set(modFusionerExtension.getJarVersion());
|
||||
getDestinationDirectory().set(getProject().file(modFusionerExtension.getOutputDirectory()));
|
||||
|
||||
// We don't allow custom input files, when the user defines their own task
|
||||
getInputs().files();
|
||||
|
||||
// Only allow the task to run once per cycle
|
||||
getOutputs().upToDateWhen(spec -> hasRun.get());
|
||||
|
||||
// Set output file
|
||||
mergedJar = new File(getDestinationDirectory().get().getAsFile(), getArchiveFileName().get());
|
||||
getOutputs().file(mergedJar);
|
||||
}
|
||||
|
||||
/**
|
||||
* Main task logic
|
||||
* @throws IOException - Thrown when an IO error occurs
|
||||
*/
|
||||
void fuseJars() throws IOException {
|
||||
long time = System.currentTimeMillis();
|
||||
|
||||
// Check that all required values are set
|
||||
if (modFusionerExtension.getOutJarName() == null || modFusionerExtension.getGroup() == null) {
|
||||
ModFusionerPlugin.logger.error("Please configure \"group\" and \"outJarName\" manually!");
|
||||
return;
|
||||
}
|
||||
|
||||
ModFusionerPlugin.logger.lifecycle("Start Fusing Jars");
|
||||
|
||||
// Get settings from extension
|
||||
ModFusionerExtension.ForgeConfiguration forgeConfiguration = modFusionerExtension.getForgeConfiguration();
|
||||
ModFusionerExtension.FabricConfiguration fabricConfiguration = modFusionerExtension.getFabricConfiguration();
|
||||
ModFusionerExtension.QuiltConfiguration quiltConfiguration = modFusionerExtension.getQuiltConfiguration();
|
||||
FusionerExtension.ForgeConfiguration forgeConfiguration = modFusionerExtension.getForgeConfiguration();
|
||||
FusionerExtension.FabricConfiguration fabricConfiguration = modFusionerExtension.getFabricConfiguration();
|
||||
FusionerExtension.QuiltConfiguration quiltConfiguration = modFusionerExtension.getQuiltConfiguration();
|
||||
|
||||
List<ModFusionerExtension.CustomConfiguration> customConfigurations = modFusionerExtension.getCustomConfigurations();
|
||||
List<FusionerExtension.CustomConfiguration> customConfigurations = modFusionerExtension.getCustomConfigurations();
|
||||
|
||||
// Try to resolve the projects specific in the extension config
|
||||
Project forgeProject = null;
|
||||
Project fabricProject = null;
|
||||
Project quiltProject = null;
|
||||
Map<Project, ModFusionerExtension.CustomConfiguration> customProjects = new HashMap<>();
|
||||
Map<Project, FusionerExtension.CustomConfiguration> customProjects = new HashMap<>();
|
||||
List<Boolean> validation = new ArrayList<>();
|
||||
|
||||
if (forgeConfiguration != null) {
|
||||
@@ -75,7 +97,7 @@ public class FuseJarsTask extends DefaultTask {
|
||||
}
|
||||
|
||||
if (customConfigurations != null) {
|
||||
for (ModFusionerExtension.CustomConfiguration customSettings : customConfigurations) {
|
||||
for (FusionerExtension.CustomConfiguration customSettings : customConfigurations) {
|
||||
try {
|
||||
customProjects.put(rootProject.getAllprojects().stream().filter(p -> !p.getName().equals(rootProject.getName())).filter(p -> p.getName().equals(customSettings.getProjectName())).findFirst().get(), customSettings);
|
||||
validation.add(true);
|
||||
@@ -95,28 +117,27 @@ public class FuseJarsTask extends DefaultTask {
|
||||
File forgeJar = null;
|
||||
File fabricJar = null;
|
||||
File quiltJar = null;
|
||||
Map<ModFusionerExtension.CustomConfiguration, File> customJars = new HashMap<>();
|
||||
Map<FusionerExtension.CustomConfiguration, File> customJars = new HashMap<>();
|
||||
|
||||
if (forgeProject != null && forgeConfiguration != null) {
|
||||
forgeJar = getInputFile(forgeConfiguration.getJarLocation(), forgeProject);
|
||||
forgeJar = getInputFile(forgeConfiguration.getInputFile(), forgeConfiguration.getInputTaskName(), forgeProject);
|
||||
}
|
||||
|
||||
if (fabricProject != null && fabricConfiguration != null) {
|
||||
fabricJar = getInputFile(fabricConfiguration.getJarLocation(), fabricProject);
|
||||
fabricJar = getInputFile(fabricConfiguration.getInputFile(), fabricConfiguration.getInputTaskName(), fabricProject);
|
||||
}
|
||||
|
||||
if (quiltProject != null && quiltConfiguration != null) {
|
||||
quiltJar = getInputFile(quiltConfiguration.getJarLocation(), quiltProject);
|
||||
quiltJar = getInputFile(quiltConfiguration.getInputFile(), quiltConfiguration.getInputTaskName(), quiltProject);
|
||||
}
|
||||
|
||||
for (Map.Entry<Project, ModFusionerExtension.CustomConfiguration> entry : customProjects.entrySet()) {
|
||||
File f = getInputFile(entry.getValue().getJarLocation(), entry.getKey());
|
||||
for (Map.Entry<Project, FusionerExtension.CustomConfiguration> entry : customProjects.entrySet()) {
|
||||
File f = getInputFile(entry.getValue().getInputFile(), entry.getValue().getInputTaskName(), entry.getKey());
|
||||
if (f != null)
|
||||
customJars.put(entry.getValue(), f);
|
||||
}
|
||||
|
||||
// Set up the final output jar
|
||||
File mergedJar = new File(rootProject.getRootDir(), modFusionerExtension.getOutputDir() + File.separator + modFusionerExtension.getOutJarName());
|
||||
if (mergedJar.exists()) FileUtils.forceDelete(mergedJar);
|
||||
if (!mergedJar.getParentFile().exists()) mergedJar.getParentFile().mkdirs();
|
||||
|
||||
@@ -124,9 +145,9 @@ public class FuseJarsTask extends DefaultTask {
|
||||
JarMergeAction mergeAction = JarMergeAction.of(
|
||||
customJars,
|
||||
modFusionerExtension.getDuplicateRelocations(),
|
||||
modFusionerExtension.getGroup(),
|
||||
modFusionerExtension.getPackageGroup(),
|
||||
new File(rootProject.getRootDir(), ".gradle" + File.separator + "fusioner"),
|
||||
modFusionerExtension.getOutJarName()
|
||||
getArchiveFileName().get()
|
||||
);
|
||||
|
||||
// Forge
|
||||
@@ -155,6 +176,27 @@ public class FuseJarsTask extends DefaultTask {
|
||||
mergeAction.clean();
|
||||
|
||||
ModFusionerPlugin.logger.lifecycle("Fused jar created in " + (System.currentTimeMillis() - time) / 1000.0 + " seconds.");
|
||||
hasRun.set(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the main task logic and copy the files to the correct locations
|
||||
* @return - Just returns true to say the task executed
|
||||
*/
|
||||
@Override
|
||||
protected @NotNull CopyAction createCopyAction() {
|
||||
return copyActionProcessingStream -> {
|
||||
copyActionProcessingStream.process(fileCopyDetailsInternal -> {
|
||||
if (!hasRun.get())
|
||||
try {
|
||||
fuseJars();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
|
||||
return WorkResults.didWork(true);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -164,9 +206,11 @@ public class FuseJarsTask extends DefaultTask {
|
||||
* @return - The jar file or null
|
||||
*/
|
||||
@Nullable
|
||||
private File getInputFile(@Nullable String jarLocation, Project inProject) {
|
||||
private File getInputFile(@Nullable String jarLocation, String inputTaskName, Project inProject) {
|
||||
if (jarLocation != null && !jarLocation.isEmpty()) {
|
||||
return new File(inProject.getProjectDir(), jarLocation);
|
||||
} else if (inputTaskName != null && !inputTaskName.isEmpty()) {
|
||||
return FileTools.resolveFile(inProject, inputTaskName);
|
||||
} else {
|
||||
int i = 0;
|
||||
for (File file : new File(inProject.getBuildDir(), "libs").listFiles()) {
|
@@ -3,7 +3,6 @@ package com.hypherionmc.modfusioner.utils;
|
||||
import org.apache.tika.Tika;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
@@ -2,6 +2,9 @@ package com.hypherionmc.modfusioner.utils;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.FilenameUtils;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.Task;
|
||||
import org.gradle.api.tasks.bundling.AbstractArchiveTask;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
@@ -10,11 +13,11 @@ import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.CopyOption;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.*;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Scanner;
|
||||
|
||||
import static org.apache.commons.io.FileUtils.*;
|
||||
|
||||
@@ -399,4 +402,25 @@ public class FileTools {
|
||||
|
||||
return dir;
|
||||
}
|
||||
|
||||
public static File resolveFile(Project project, Object obj) {
|
||||
if (obj == null) {
|
||||
throw new NullPointerException("Null Path");
|
||||
}
|
||||
|
||||
if (obj instanceof String) {
|
||||
Task t = project.getTasks().getByName((String) obj);
|
||||
if (t instanceof AbstractArchiveTask)
|
||||
return ((AbstractArchiveTask)t).getArchiveFile().get().getAsFile();
|
||||
}
|
||||
|
||||
if (obj instanceof File) {
|
||||
return (File) obj;
|
||||
}
|
||||
|
||||
if (obj instanceof AbstractArchiveTask) {
|
||||
return ((AbstractArchiveTask)obj).getArchiveFile().get().getAsFile();
|
||||
}
|
||||
return project.file(obj);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user