Skip to content

Commit 39fb771

Browse files
committed
Add gradleutils#pluginDevDefaults
Does some convention defaults when invoked with the configurations container and the requested Gradle version. Helps to eliminate more unnecessary clutter in the buildscripts.
1 parent 0b316d3 commit 39fb771

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsExtensionForProject.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
package net.minecraftforge.gradleutils;
66

77
import org.gradle.api.Action;
8+
import org.gradle.api.artifacts.ConfigurationContainer;
89
import org.gradle.api.provider.Property;
10+
import org.gradle.api.provider.Provider;
11+
import org.gradle.api.provider.ProviderConvertible;
912
import org.gradle.api.publish.maven.MavenPublication;
1013
import org.gradle.api.tasks.TaskProvider;
1114

@@ -20,6 +23,14 @@ public sealed interface GradleUtilsExtensionForProject extends GradleUtilsExtens
2023
/// @return The property for the display name
2124
Property<String> getDisplayName();
2225

26+
void pluginDevDefaults(ConfigurationContainer configurations, CharSequence gradleVersion);
27+
28+
void pluginDevDefaults(ConfigurationContainer configurations, Provider<? extends CharSequence> gradleVersion);
29+
30+
default void pluginDevDefaults(ConfigurationContainer configurations, ProviderConvertible<? extends CharSequence> gradleVersion) {
31+
this.pluginDevDefaults(configurations, gradleVersion.asProvider());
32+
}
33+
2334
/// Promotes a publication to the <a href="https://files.minecraftforge.net">Forge Files Site</a>.
2435
///
2536
/// Publications that are promoted will automatically have the relevant task added as a finalizer to the

src/main/groovy/net/minecraftforge/gradleutils/GradleUtilsExtensionImpl.groovy

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import groovy.transform.PackageScope
99
import org.codehaus.groovy.runtime.InvokerHelper
1010
import org.gradle.api.Action
1111
import org.gradle.api.Project
12+
import org.gradle.api.artifacts.Configuration
13+
import org.gradle.api.artifacts.ConfigurationContainer
1214
import org.gradle.api.artifacts.repositories.MavenArtifactRepository
15+
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
1316
import org.gradle.api.file.Directory
1417
import org.gradle.api.file.DirectoryProperty
1518
import org.gradle.api.flow.FlowProviders
@@ -210,6 +213,25 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
210213
}
211214
}
212215

216+
@Override
217+
void pluginDevDefaults(ConfigurationContainer configurations, CharSequence gradleVersion) {
218+
this.pluginDevDefaults(configurations, this.providers.provider { gradleVersion })
219+
}
220+
221+
@Override
222+
void pluginDevDefaults(ConfigurationContainer configurations, Provider<? extends CharSequence> gradleVersion) {
223+
// Applies the "Gradle Plugin API Version" attribute to configuration
224+
// This was added in Gradle 7, gives consumers useful errors if they are on an old version
225+
this.project.configurations.named(JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME.&containsIgnoreCase as Spec<String>).configureEach { configuration ->
226+
configuration.attributes { attributes ->
227+
attributes.attributeProvider(
228+
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
229+
gradleVersion.map { this.objects.named(GradlePluginApiVersion, it.toString()) }
230+
)
231+
}
232+
}
233+
}
234+
213235
@Override
214236
TaskProvider<? extends PromotePublication> promote(MavenPublication publication, @Nullable Action<? super PromotePublication> cfg) {
215237
this.project.tasks.register("promote${publication.name.capitalize()}Publication", PromotePublicationImpl, publication).tap { promote ->

0 commit comments

Comments
 (0)