From 9ddff5f31a44037a772bfefc4998e7b379410da6 Mon Sep 17 00:00:00 2001 From: Juuxel <6596629+Juuxel@users.noreply.github.com> Date: Tue, 23 Nov 2021 20:35:08 +0200 Subject: [PATCH] Fix gradle module metadatas not including api deps in runtimeElements (#540) --- .../configuration/CompileConfiguration.java | 4 +-- .../loom/configuration/MavenPublication.java | 5 +++- .../RemappedConfigurationEntry.java | 29 ++++++++++++++----- .../net/fabricmc/loom/util/Constants.java | 15 +++++----- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index e39634a..f99d721 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -96,8 +96,8 @@ public final class CompileConfiguration { extendsFrom(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME, entry.getRemappedConfiguration(), project); } - if (entry.hasConsumerConfiguration()) { - extendsFrom(entry.consumerConfiguration(), entry.sourceConfiguration(), project); + for (String outgoingConfiguration : entry.publishingMode().outgoingConfigurations()) { + extendsFrom(outgoingConfiguration, entry.sourceConfiguration(), project); } } diff --git a/src/main/java/net/fabricmc/loom/configuration/MavenPublication.java b/src/main/java/net/fabricmc/loom/configuration/MavenPublication.java index d49d0b7..29c312e 100644 --- a/src/main/java/net/fabricmc/loom/configuration/MavenPublication.java +++ b/src/main/java/net/fabricmc/loom/configuration/MavenPublication.java @@ -33,6 +33,7 @@ import java.util.Set; import java.util.WeakHashMap; import java.util.concurrent.atomic.AtomicBoolean; +import com.google.common.collect.ImmutableMap; import groovy.util.Node; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -48,7 +49,9 @@ import net.fabricmc.loom.util.DeprecationHelper; import net.fabricmc.loom.util.GroovyXmlUtil; public final class MavenPublication { - private static final Map CONFIGURATION_TO_SCOPE = Map.of( + // ImmutableMap is needed since it guarantees ordering + // (compile must go before runtime, or otherwise dependencies might get the "weaker" runtime scope). + private static final Map CONFIGURATION_TO_SCOPE = ImmutableMap.of( JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME, "compile", JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME, "runtime" ); diff --git a/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java b/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java index f7f4395..2eba6f4 100644 --- a/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java +++ b/src/main/java/net/fabricmc/loom/configuration/RemappedConfigurationEntry.java @@ -24,17 +24,15 @@ package net.fabricmc.loom.configuration; +import java.util.Set; + import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.plugins.JavaPlugin; import org.jetbrains.annotations.Nullable; -public record RemappedConfigurationEntry(String sourceConfiguration, String targetConfiguration, boolean compileClasspath, boolean runtimeClasspath, String consumerConfiguration, @Nullable String replacedWith) { - public RemappedConfigurationEntry(String sourceConfiguration, String targetConfiguration, boolean compileClasspath, boolean runtimeClasspath, String consumerConfiguration) { - this(sourceConfiguration, targetConfiguration, compileClasspath, runtimeClasspath, consumerConfiguration, null); - } - - public boolean hasConsumerConfiguration() { - return consumerConfiguration != null && !consumerConfiguration.isEmpty(); +public record RemappedConfigurationEntry(String sourceConfiguration, String targetConfiguration, boolean compileClasspath, boolean runtimeClasspath, PublishingMode publishingMode, @Nullable String replacedWith) { + public RemappedConfigurationEntry(String sourceConfiguration, String targetConfiguration, boolean compileClasspath, boolean runtimeClasspath, PublishingMode publishingMode) { + this(sourceConfiguration, targetConfiguration, compileClasspath, runtimeClasspath, publishingMode, null); } public String getRemappedConfiguration() { @@ -48,4 +46,21 @@ public record RemappedConfigurationEntry(String sourceConfiguration, String targ return targetConfiguration; } + + public enum PublishingMode { + NONE, + COMPILE_ONLY(JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME), + RUNTIME_ONLY(JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME), + COMPILE_AND_RUNTIME(JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME); + + private final Set outgoingConfigurations; + + PublishingMode(String... outgoingConfigurations) { + this.outgoingConfigurations = Set.of(outgoingConfigurations); + } + + public Set outgoingConfigurations() { + return outgoingConfigurations; + } + } } diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java index 2b77c93..dae98a8 100644 --- a/src/main/java/net/fabricmc/loom/util/Constants.java +++ b/src/main/java/net/fabricmc/loom/util/Constants.java @@ -31,6 +31,7 @@ import org.gradle.api.plugins.JavaPlugin; import org.objectweb.asm.Opcodes; import net.fabricmc.loom.configuration.RemappedConfigurationEntry; +import net.fabricmc.loom.configuration.RemappedConfigurationEntry.PublishingMode; public class Constants { public static final String LIBRARIES_BASE = "https://libraries.minecraft.net/"; @@ -44,13 +45,13 @@ public class Constants { public static final int ASM_VERSION = Opcodes.ASM9; public static final List MOD_COMPILE_ENTRIES = ImmutableList.of( - new RemappedConfigurationEntry("modApi", JavaPlugin.API_CONFIGURATION_NAME, true, true, JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME), - new RemappedConfigurationEntry("modImplementation", JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, true, true, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME), - new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, "", "modRuntimeOnly"), - new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, false, ""), - new RemappedConfigurationEntry("modCompileOnlyApi", JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME, true, false, JavaPlugin.API_ELEMENTS_CONFIGURATION_NAME), - new RemappedConfigurationEntry("modRuntimeOnly", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME), - new RemappedConfigurationEntry("modLocalRuntime", Configurations.LOCAL_RUNTIME, false, true, "") + new RemappedConfigurationEntry("modApi", JavaPlugin.API_CONFIGURATION_NAME, true, true, PublishingMode.COMPILE_AND_RUNTIME), + new RemappedConfigurationEntry("modImplementation", JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME, true, true, PublishingMode.RUNTIME_ONLY), + new RemappedConfigurationEntry("modRuntime", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, PublishingMode.NONE, "modRuntimeOnly"), + new RemappedConfigurationEntry("modCompileOnly", JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, true, false, PublishingMode.NONE), + new RemappedConfigurationEntry("modCompileOnlyApi", JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME, true, false, PublishingMode.COMPILE_ONLY), + new RemappedConfigurationEntry("modRuntimeOnly", JavaPlugin.RUNTIME_ONLY_CONFIGURATION_NAME, false, true, PublishingMode.RUNTIME_ONLY), + new RemappedConfigurationEntry("modLocalRuntime", Configurations.LOCAL_RUNTIME, false, true, PublishingMode.NONE) ); private Constants() {