Reduce scope of mavenOptional feature to only the Maven Plugin
Previously, the mavenOptional was added to every published module but it was only used by spring-boot-maven-plugin. This commit reduces its scope so that it only affects the Maven plugin. It also reworks the implementation to reuse the existing optional configuration rather than declaring a new mavenOptional configuration. Lastly, publication of Gradle Module Metadata (GMM) has been disabled for spring-boot-maven-plugin. This is seen as preferable to publishing the metadata – which isn't really needed as it does not contain any useful additional information – and having to suppress warnings about incomplete mapping of GMM to pom metadata. Closes gh-41263
This commit is contained in:
parent
2ed72c6e4d
commit
365fdfee45
|
@ -19,8 +19,6 @@ package org.springframework.boot.build;
|
|||
import org.apache.maven.artifact.repository.MavenArtifactRepository;
|
||||
import org.gradle.api.Project;
|
||||
import org.gradle.api.attributes.Usage;
|
||||
import org.gradle.api.component.AdhocComponentWithVariants;
|
||||
import org.gradle.api.component.ConfigurationVariantDetails;
|
||||
import org.gradle.api.plugins.JavaPlugin;
|
||||
import org.gradle.api.plugins.JavaPluginExtension;
|
||||
import org.gradle.api.publish.PublishingExtension;
|
||||
|
@ -101,7 +99,6 @@ class MavenPublishingConventions {
|
|||
}
|
||||
|
||||
private void customizeJavaMavenPublication(MavenPublication publication, Project project) {
|
||||
addMavenOptionalFeature(publication, project);
|
||||
if (publication.getName().equals("pluginMaven")) {
|
||||
return;
|
||||
}
|
||||
|
@ -111,29 +108,6 @@ class MavenPublishingConventions {
|
|||
(strategy) -> strategy.usage(Usage.JAVA_RUNTIME, VariantVersionMappingStrategy::fromResolutionResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a feature that allows maven plugins to declare optional dependencies that
|
||||
* appear in the POM. This is required to make m2e in Eclipse happy.
|
||||
* @param publication the project's Maven publication
|
||||
* @param project the project to add the feature to
|
||||
*/
|
||||
private void addMavenOptionalFeature(MavenPublication publication, Project project) {
|
||||
JavaPluginExtension extension = project.getExtensions().getByType(JavaPluginExtension.class);
|
||||
extension.registerFeature("mavenOptional",
|
||||
(feature) -> feature.usingSourceSet(extension.getSourceSets().getByName("main")));
|
||||
AdhocComponentWithVariants javaComponent = (AdhocComponentWithVariants) project.getComponents()
|
||||
.findByName("java");
|
||||
javaComponent.addVariantsFromConfiguration(
|
||||
project.getConfigurations().findByName("mavenOptionalRuntimeElements"),
|
||||
ConfigurationVariantDetails::mapToOptional);
|
||||
suppressMavenOptionalFeatureWarnings(publication);
|
||||
}
|
||||
|
||||
private void suppressMavenOptionalFeatureWarnings(MavenPublication publication) {
|
||||
publication.suppressPomMetadataWarningsFor("mavenOptionalApiElements");
|
||||
publication.suppressPomMetadataWarningsFor("mavenOptionalRuntimeElements");
|
||||
}
|
||||
|
||||
private void customizeOrganization(MavenPomOrganization organization) {
|
||||
organization.getName().set("VMware, Inc.");
|
||||
organization.getUrl().set("https://spring.io");
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -54,6 +54,8 @@ import org.gradle.api.artifacts.component.ModuleComponentIdentifier;
|
|||
import org.gradle.api.artifacts.result.ResolvedArtifactResult;
|
||||
import org.gradle.api.attributes.DocsType;
|
||||
import org.gradle.api.attributes.Usage;
|
||||
import org.gradle.api.component.AdhocComponentWithVariants;
|
||||
import org.gradle.api.component.SoftwareComponent;
|
||||
import org.gradle.api.file.CopySpec;
|
||||
import org.gradle.api.file.DirectoryProperty;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
|
@ -65,6 +67,7 @@ import org.gradle.api.plugins.JavaPluginExtension;
|
|||
import org.gradle.api.publish.PublishingExtension;
|
||||
import org.gradle.api.publish.maven.MavenPublication;
|
||||
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin;
|
||||
import org.gradle.api.publish.tasks.GenerateModuleMetadata;
|
||||
import org.gradle.api.tasks.Classpath;
|
||||
import org.gradle.api.tasks.InputFiles;
|
||||
import org.gradle.api.tasks.JavaExec;
|
||||
|
@ -82,11 +85,14 @@ import org.gradle.api.tasks.bundling.Jar;
|
|||
import org.gradle.api.tasks.javadoc.Javadoc;
|
||||
import org.gradle.external.javadoc.StandardJavadocDocletOptions;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import org.springframework.boot.build.DeployedPlugin;
|
||||
import org.springframework.boot.build.MavenRepositoryPlugin;
|
||||
import org.springframework.boot.build.optional.OptionalDependenciesPlugin;
|
||||
import org.springframework.boot.build.test.DockerTestPlugin;
|
||||
import org.springframework.boot.build.test.IntegrationTestPlugin;
|
||||
import org.springframework.core.CollectionFactory;
|
||||
|
@ -116,6 +122,33 @@ public class MavenPluginPlugin implements Plugin<Project> {
|
|||
addDocumentPluginGoalsTask(project, generatePluginDescriptorTask);
|
||||
addPrepareMavenBinariesTask(project);
|
||||
addExtractVersionPropertiesTask(project);
|
||||
publishOptionalDependenciesInPom(project);
|
||||
project.getTasks().withType(GenerateModuleMetadata.class).configureEach((task) -> task.setEnabled(false));
|
||||
}
|
||||
|
||||
private void publishOptionalDependenciesInPom(Project project) {
|
||||
project.getPlugins().withType(OptionalDependenciesPlugin.class, (optionalDependencies) -> {
|
||||
SoftwareComponent component = project.getComponents().findByName("java");
|
||||
if (component instanceof AdhocComponentWithVariants componentWithVariants) {
|
||||
componentWithVariants.addVariantsFromConfiguration(
|
||||
project.getConfigurations().getByName(OptionalDependenciesPlugin.OPTIONAL_CONFIGURATION_NAME),
|
||||
(variant) -> variant.mapToOptional());
|
||||
}
|
||||
});
|
||||
MavenPublication publication = (MavenPublication) project.getExtensions()
|
||||
.getByType(PublishingExtension.class)
|
||||
.getPublications()
|
||||
.getByName("maven");
|
||||
publication.getPom().withXml((xml) -> {
|
||||
Element root = xml.asElement();
|
||||
NodeList children = root.getChildNodes();
|
||||
for (int i = 0; i < children.getLength(); i++) {
|
||||
Node child = children.item(i);
|
||||
if ("dependencyManagement".equals(child.getNodeName())) {
|
||||
root.removeChild(child);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void configurePomPackaging(Project project) {
|
||||
|
|
|
@ -58,17 +58,17 @@ dependencies {
|
|||
intTestImplementation("org.assertj:assertj-core")
|
||||
intTestImplementation("org.junit.jupiter:junit-jupiter")
|
||||
|
||||
mavenOptionalImplementation("org.apache.maven.plugins:maven-shade-plugin") {
|
||||
exclude(group: "javax.annotation", module: "javax.annotation-api")
|
||||
exclude(group: "javax.enterprise", module: "cdi-api")
|
||||
exclude(group: "javax.inject", module: "javax.inject")
|
||||
}
|
||||
|
||||
mavenRepository(project(path: ":spring-boot-project:spring-boot", configuration: "mavenRepository"))
|
||||
mavenRepository(project(path: ":spring-boot-project:spring-boot-test", configuration: "mavenRepository"))
|
||||
mavenRepository(project(path: ":spring-boot-project:spring-boot-devtools", configuration: "mavenRepository"))
|
||||
mavenRepository(project(path: ":spring-boot-project:spring-boot-docker-compose", configuration: "mavenRepository"))
|
||||
|
||||
optional("org.apache.maven.plugins:maven-shade-plugin") {
|
||||
exclude(group: "javax.annotation", module: "javax.annotation-api")
|
||||
exclude(group: "javax.enterprise", module: "cdi-api")
|
||||
exclude(group: "javax.inject", module: "javax.inject")
|
||||
}
|
||||
|
||||
testImplementation("org.apache.maven:maven-core") {
|
||||
exclude(group: "javax.annotation", module: "javax.annotation-api")
|
||||
exclude(group: "javax.inject", module: "javax.inject")
|
||||
|
|
Loading…
Reference in New Issue