From dc69315715ce24e987070ed74f582f7b11db94d2 Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Sun, 21 Apr 2019 18:42:51 +0200 Subject: [PATCH] add correct Maven dependencies to maven-publish mod POMs (#79) --- .../net/fabricmc/loom/AbstractPlugin.java | 52 +++++++++++++++++-- .../loom/util/LoomDependencyManager.java | 2 +- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index f662506..703e7eb 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -25,6 +25,9 @@ package net.fabricmc.loom; import com.google.common.collect.ImmutableMap; +import groovy.util.Node; +import groovy.util.NodeList; +import groovy.xml.QName; import net.fabricmc.loom.providers.MappingsProvider; import net.fabricmc.loom.providers.MinecraftProvider; import net.fabricmc.loom.providers.ModRemapperProvider; @@ -36,10 +39,21 @@ import net.fabricmc.loom.util.NestedJars; import net.fabricmc.loom.util.SetupIntelijRunConfigs; import org.gradle.api.*; import org.gradle.api.artifacts.Configuration; +import org.gradle.api.artifacts.Dependency; +import org.gradle.api.artifacts.ModuleDependency; +import org.gradle.api.artifacts.ProjectDependency; import org.gradle.api.artifacts.dsl.DependencyHandler; +import org.gradle.api.artifacts.maven.Conf2ScopeMappingContainer; import org.gradle.api.artifacts.repositories.MavenArtifactRepository; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.plugins.MavenPlugin; +import org.gradle.api.plugins.MavenPluginConvention; +import org.gradle.api.publish.Publication; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; +import org.gradle.api.publish.maven.tasks.AbstractPublishToMaven; +import org.gradle.api.publish.maven.tasks.GenerateMavenPom; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.bundling.AbstractArchiveTask; import org.gradle.api.tasks.compile.JavaCompile; @@ -49,6 +63,9 @@ import org.gradle.plugins.ide.idea.model.IdeaModel; import java.io.File; import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Collections; import java.util.Map; import java.util.Set; @@ -77,7 +94,7 @@ public class AbstractPlugin implements Plugin { addMavenRepo(target, "Mojang", "https://libraries.minecraft.net/"); Configuration compileModsConfig = project.getConfigurations().maybeCreate(Constants.COMPILE_MODS); - compileModsConfig.setTransitive(false); // Dont get transitive deps of mods + compileModsConfig.setTransitive(false); Configuration compileModsMappedConfig = project.getConfigurations().maybeCreate(Constants.COMPILE_MODS_MAPPED); compileModsMappedConfig.setTransitive(false); // Dont get transitive deps of mods Configuration minecraftNamedConfig = project.getConfigurations().maybeCreate(Constants.MINECRAFT_NAMED); @@ -127,9 +144,9 @@ public class AbstractPlugin implements Plugin { }); } } - } + configureMaven(); } /** @@ -240,7 +257,6 @@ public class AbstractPlugin implements Plugin { dependencyManager.addProvider(new MinecraftProvider()); dependencyManager.addProvider(new MappingsProvider()); dependencyManager.addProvider(new ModRemapperProvider()); - dependencyManager.handleDependencies(project1); project1.getTasks().getByName("idea").finalizedBy(project1.getTasks().getByName("genIdeaWorkspace")); @@ -285,6 +301,36 @@ public class AbstractPlugin implements Plugin { }); } + protected void configureMaven() { + project.afterEvaluate((p) -> { + Configuration compileModsConfig = p.getConfigurations().getByName(Constants.COMPILE_MODS); + + // add modsCompile to maven-publish + PublishingExtension mavenPublish = p.getExtensions().findByType(PublishingExtension.class); + if (mavenPublish != null) { + mavenPublish.publications((publications) -> { + for (Publication publication : publications) { + if (publication instanceof MavenPublication) { + ((MavenPublication) publication).pom((pom) -> { + pom.withXml((xml) -> { + Node dependencies = xml.asNode().appendNode("dependencies"); + + for (Dependency dependency : compileModsConfig.getAllDependencies()) { + Node depNode = dependencies.appendNode("dependency"); + depNode.appendNode("groupId", dependency.getGroup()); + depNode.appendNode("artifactId", dependency.getName()); + depNode.appendNode("version", dependency.getVersion()); + depNode.appendNode("scope", "compile"); + } + }); + }); + } + } + }); + } + }); + } + public static boolean isRootProject(Project project){ return project.getRootProject() == project; } diff --git a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java index 94e78e9..1e88eee 100644 --- a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java +++ b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java @@ -122,7 +122,7 @@ public class LoomDependencyManager { libraries.get("common").getAsJsonArray().forEach(jsonElement -> { String name = jsonElement.getAsJsonObject().get("name").getAsString(); - Configuration configuration = project.getConfigurations().getByName("compile"); + Configuration configuration = project.getConfigurations().getByName(Constants.MINECRAFT_DEPENDENCIES); ExternalModuleDependency modDep = (ExternalModuleDependency) project.getDependencies().create(name); modDep.setTransitive(false); configuration.getDependencies().add(modDep);