Allow either file or task inputs

This commit is contained in:
2023-11-04 00:57:28 +02:00
parent 0437729cd6
commit a7cfeec9f4
6 changed files with 263 additions and 77 deletions

View File

@@ -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();

View File

@@ -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);
}
}
}

View File

@@ -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());
}
}

View File

@@ -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()) {

View File

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

View File

@@ -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);
}
}