diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index d47ca801..9715b462 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -32,6 +32,7 @@ import net.fabricmc.loom.task.RemapJar; import net.fabricmc.loom.task.RemapSourcesJar; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.LoomDependencyManager; +import net.fabricmc.loom.util.NestedJars; import net.fabricmc.loom.util.SetupIntelijRunConfigs; import org.gradle.api.*; import org.gradle.api.artifacts.Configuration; @@ -50,6 +51,7 @@ import java.io.File; import java.io.IOException; import java.util.Map; import java.util.Set; +import java.util.function.Consumer; public class AbstractPlugin implements Plugin { protected Project project; @@ -266,7 +268,7 @@ public class AbstractPlugin implements Plugin { remapJarTask.dependsOn(project1.getTasks().getByName("jar")); project1.getTasks().getByName("build").dependsOn(remapJarTask); //Run all the sub project remap jars tasks before the root projects jar, this is to allow us to include projects - project1.subprojects(subProject -> remapJarTask.dependsOn(subProject.getTasksByName("remapJar", false))); + NestedJars.getRequiredTasks(project1).forEach(remapJarTask::dependsOn); try { AbstractArchiveTask sourcesTask = (AbstractArchiveTask) project1.getTasks().getByName("sourcesJar"); diff --git a/src/main/java/net/fabricmc/loom/util/NestedJars.java b/src/main/java/net/fabricmc/loom/util/NestedJars.java index e43f9776..cfbdf31d 100644 --- a/src/main/java/net/fabricmc/loom/util/NestedJars.java +++ b/src/main/java/net/fabricmc/loom/util/NestedJars.java @@ -44,6 +44,7 @@ import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry; import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.zip.ZipEntry; @@ -112,6 +113,26 @@ public class NestedJars { return fileList; } + //Looks for any deps that require a sub project to be built first + public static List getRequiredTasks(Project project){ + List remapTasks = new ArrayList<>(); + + Configuration configuration = project.getConfigurations().getByName(Constants.INCLUDE); + DependencySet dependencies = configuration.getDependencies(); + for (Dependency dependency : dependencies) { + if (dependency instanceof ProjectDependency) { + ProjectDependency projectDependency = (ProjectDependency) dependency; + Project dependencyProject = projectDependency.getDependencyProject(); + for (Task task : dependencyProject.getTasksByName("remapJar", false)) { + if (task instanceof RemapJar) { + remapTasks.add((RemapJar) task); + } + } + } + } + return remapTasks; + } + private static ZipEntryTransformerEntry[] single(ZipEntryTransformerEntry element) { return new ZipEntryTransformerEntry[]{element}; }