@@ -11,7 +11,9 @@ import groovy.transform.PackageScope
1111import org.codehaus.groovy.runtime.DefaultGroovyMethods
1212import org.gradle.api.Action
1313import org.gradle.api.Project
14+ import org.gradle.api.artifacts.Configuration
1415import org.gradle.api.artifacts.ConfigurationContainer
16+ import org.gradle.api.artifacts.DependencySet
1517import org.gradle.api.artifacts.repositories.MavenArtifactRepository
1618import org.gradle.api.attributes.plugin.GradlePluginApiVersion
1719import org.gradle.api.file.Directory
@@ -24,13 +26,15 @@ import org.gradle.api.model.ObjectFactory
2426import org.gradle.api.plugins.BasePluginExtension
2527import org.gradle.api.plugins.ExtensionAware
2628import org.gradle.api.plugins.JavaPlugin
29+ import org.gradle.api.plugins.JavaPluginExtension
2730import org.gradle.api.provider.Property
2831import org.gradle.api.provider.Provider
2932import org.gradle.api.provider.ProviderFactory
3033import org.gradle.api.publish.PublishingExtension
3134import org.gradle.api.publish.maven.MavenPublication
3235import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
3336import org.gradle.api.specs.Spec
37+ import org.gradle.api.tasks.SourceSetContainer
3438import org.gradle.api.tasks.TaskProvider
3539import org.gradle.api.tasks.compile.GroovyCompile
3640import org.gradle.api.tasks.compile.JavaCompile
@@ -155,10 +159,20 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
155159 super (project)
156160 this . project = project
157161
158- project. tasks. register(GenerateActionsWorkflow . NAME , GenerateActionsWorkflowImpl )
162+ this . setup(project)
163+ project. afterEvaluate { this . finish(it) }
164+ }
159165
166+ private void setup (Project project ) {
167+ project. tasks. register(GenerateActionsWorkflow . NAME , GenerateActionsWorkflowImpl )
160168
161- project. afterEvaluate { this . finish(it) }
169+ project. pluginManager. withPlugin(' publishing' ) {
170+ if (this . problems. test(' net.minecraftforge.gradleutils.publishing.use-base-archives-name' )) {
171+ project. extensions. getByType(PublishingExtension ). publications. withType(MavenPublication ). configureEach {
172+ it. artifactId = project. extensions. getByType(BasePluginExtension ). archivesName
173+ }
174+ }
175+ }
162176 }
163177
164178 private void finish (Project project ) {
@@ -206,7 +220,7 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
206220 file. bytes = textOutput
207221
208222 task. logger. lifecycle(" Generated report file ${ projectLayout.projectDirectory.asFile.toPath().relativize(file.toPath())} " )
209- break ;
223+ break
210224 }
211225 }
212226 }
@@ -215,19 +229,87 @@ import static net.minecraftforge.gradleutils.GradleUtilsPlugin.LOGGER
215229 }
216230 }
217231
218- // Removes local Gradle API from compileOnly. This is a workaround for bugged plugins.
219- // Publish Plugin: https://github.com/gradle/plugin-portal-requests/issues/260
220- // Shadow: https://github.com/GradleUp/shadow/pull/1422
221- if (this . providers. systemProperty(' org.gradle.unsafe.suppress-gradle-api' ). map(Boolean . &parseBoolean). getOrElse(false )) {
222- final gradleApi = project. dependencies. gradleApi()
223- project. configurations. named(JavaPlugin . COMPILE_ONLY_CONFIGURATION_NAME . &equals as Spec<String > ). configureEach { compileOnly ->
224- compileOnly. withDependencies { it. remove(gradleApi) }
225- }
226- }
232+ project. pluginManager. withPlugin(' java' ) {
233+ // Removes local Gradle API dependencies if we are using external alternatives
234+ // Gradle's core plugins often force these when using 'java-gradle-plugin' or others
235+ project. extensions. getByType(JavaPluginExtension ). sourceSets { SourceSetContainer sourceSets ->
236+ final gradleApi = project. dependencies. gradleApi()
237+ final gradleTestKit = project. dependencies. gradleTestKit()
238+ final localGroovy = project. dependencies. localGroovy()
239+
240+ def hasExternalGradleApi = { @Nullable Configuration ... configurations ->
241+ for (var configuration in configurations) {
242+ if (configuration?. allDependencies?. find {
243+ (it. group == ' dev.gradleplugins' || it. group == ' name.remal.gradle-api' )
244+ && it. name == ' gradle-api'
245+ } != = null ) { return true }
246+ }
247+
248+ return false
249+ }
250+
251+ def hasExternalGradleTestKit = { @Nullable Configuration ... configurations ->
252+ for (var configuration in configurations) {
253+ if (configuration?. allDependencies?. find {
254+ (it. group == ' dev.gradleplugins' || it. group == ' name.remal.gradle-api' )
255+ && it. name == ' gradle-test-kit'
256+ } != = null ) { return true }
257+ }
258+
259+ return false
260+ }
261+
262+ def hasExternalLocalGroovy = { @Nullable Configuration ... configurations ->
263+ for (var configuration in configurations) {
264+ if (configuration?. allDependencies?. find {
265+ it. group == ' name.remal.gradle-api'
266+ && it. name == ' local-groovy'
267+ } != = null ) { return true }
268+ }
227269
228- if (this . problems. test(' net.minecraftforge.gradleutils.publishing.use-base-archives-name' )) {
229- project. extensions. getByType(PublishingExtension ). publications. withType(MavenPublication ). configureEach {
230- it. artifactId = project. extensions. getByType(BasePluginExtension ). archivesName
270+ return false
271+ }
272+
273+ def processConfigurations = { @Nullable Configuration ... configurations ->
274+ if (hasExternalGradleApi(configurations)) {
275+ for (var configuration in configurations) {
276+ configuration?. withDependencies { dependencies ->
277+ dependencies. remove(gradleApi)
278+ dependencies. remove(localGroovy)
279+ }
280+ }
281+ }
282+
283+ if (hasExternalGradleTestKit(configurations)) {
284+ for (var configuration in configurations) {
285+ configuration?. withDependencies { dependencies ->
286+ dependencies. remove(gradleTestKit)
287+ dependencies. remove(gradleApi)
288+ dependencies. remove(localGroovy)
289+ }
290+ }
291+ }
292+
293+ if (hasExternalLocalGroovy(configurations)) {
294+ for (var configuration in configurations) {
295+ configuration?. withDependencies { dependencies ->
296+ dependencies. remove(localGroovy)
297+ }
298+ }
299+ }
300+
301+ }
302+
303+ for (var sourceSet in sourceSets) {
304+ @Nullable var api = project. configurations. findByName(sourceSet. apiConfigurationName)
305+ @Nullable var compileOnlyApi = project. configurations. findByName(sourceSet. compileOnlyApiConfigurationName)
306+ @Nullable var implementation = project. configurations. findByName(sourceSet. implementationConfigurationName)
307+ @Nullable var compileOnly = project. configurations. findByName(sourceSet. compileOnlyConfigurationName)
308+ @Nullable var runtimeOnly = project. configurations. findByName(sourceSet. runtimeOnlyConfigurationName)
309+
310+ processConfigurations(api, implementation, runtimeOnly)
311+ processConfigurations(api, compileOnlyApi, implementation, compileOnly)
312+ }
231313 }
232314 }
233315
0 commit comments