ManagementConfigurationPlugin.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /*
  2. * Copyright 2004-present the original author or authors.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * https://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package io.spring.gradle.convention;
  17. import org.gradle.api.Plugin;
  18. import org.gradle.api.Project;
  19. import org.gradle.api.artifacts.ConfigurationContainer;
  20. import org.gradle.api.plugins.JavaPlugin;
  21. import org.gradle.api.plugins.JavaTestFixturesPlugin;
  22. import org.gradle.api.plugins.PluginContainer;
  23. import org.gradle.api.publish.PublishingExtension;
  24. import org.gradle.api.publish.maven.MavenPublication;
  25. import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
  26. import org.springframework.gradle.propdeps.PropDepsPlugin;
  27. /**
  28. * Creates a Management configuration that is appropriate for adding a platform to that is not exposed externally. If
  29. * the JavaPlugin is applied, the compileClasspath, runtimeClasspath, testCompileClasspath, and testRuntimeClasspath
  30. * will extend from it.
  31. * @author Rob Winch
  32. */
  33. public class ManagementConfigurationPlugin implements Plugin<Project> {
  34. public static final String MANAGEMENT_CONFIGURATION_NAME = "management";
  35. @Override
  36. public void apply(Project project) {
  37. ConfigurationContainer configurations = project.getConfigurations();
  38. configurations.create(MANAGEMENT_CONFIGURATION_NAME, (management) -> {
  39. management.setVisible(false);
  40. management.setCanBeConsumed(false);
  41. management.setCanBeResolved(false);
  42. PluginContainer plugins = project.getPlugins();
  43. plugins.withType(JavaPlugin.class, (javaPlugin) -> {
  44. configurations.getByName(JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management);
  45. configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management);
  46. configurations.getByName(JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management);
  47. configurations.getByName(JavaPlugin.TEST_RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(management);
  48. });
  49. plugins.withType(JavaTestFixturesPlugin.class, (javaTestFixturesPlugin) -> {
  50. configurations.getByName("testFixturesCompileClasspath").extendsFrom(management);
  51. configurations.getByName("testFixturesRuntimeClasspath").extendsFrom(management);
  52. });
  53. plugins.withType(MavenPublishPlugin.class, (mavenPublish) -> {
  54. PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
  55. publishing.getPublications().withType(MavenPublication.class, (mavenPublication -> {
  56. mavenPublication.versionMapping((versions) ->
  57. versions.allVariants((versionMapping) -> versionMapping.fromResolutionResult())
  58. );
  59. }));
  60. });
  61. plugins.withType(PropDepsPlugin.class, (propDepsPlugin -> {
  62. configurations.getByName("optional").extendsFrom(management);
  63. configurations.getByName("provided").extendsFrom(management);
  64. }));
  65. });
  66. }
  67. }