Skip to content

Commit 058be96

Browse files
authored
[Gradle] Fix PublishPlugin configuration cache compatibility (#116887)
Relying on GenerateMavenPom#getPom breaks configuration cache compatibility as this is a transient property that is not serialized.
1 parent 3253c2a commit 058be96

File tree

1 file changed

+33
-21
lines changed
  • build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions

1 file changed

+33
-21
lines changed

build-conventions/src/main/java/org/elasticsearch/gradle/internal/conventions/PublishPlugin.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@
1717
import org.elasticsearch.gradle.internal.conventions.info.GitInfo;
1818
import org.elasticsearch.gradle.internal.conventions.precommit.PomValidationPrecommitPlugin;
1919
import org.elasticsearch.gradle.internal.conventions.util.Util;
20-
import org.gradle.api.Action;
2120
import org.gradle.api.NamedDomainObjectSet;
2221
import org.gradle.api.Plugin;
2322
import org.gradle.api.Project;
24-
import org.gradle.api.Task;
2523
import org.gradle.api.XmlProvider;
2624
import org.gradle.api.file.ProjectLayout;
2725
import org.gradle.api.plugins.BasePlugin;
@@ -69,6 +67,7 @@ public void apply(Project project) {
6967
configureSourcesJar(project);
7068
configurePomGeneration(project);
7169
configurePublications(project);
70+
formatGeneratedPom(project);
7271
}
7372

7473
private void configurePublications(Project project) {
@@ -127,42 +126,27 @@ private void configurePomGeneration(Project project) {
127126
projectVersion.get()
128127
)
129128
);
130-
pomTask.doFirst(t -> pomTask.getPom().withXml(xml -> formatDependencies(xml)));
131129
});
132130

133131
var publishing = extensions.getByType(PublishingExtension.class);
134132
final var mavenPublications = publishing.getPublications().withType(MavenPublication.class);
135-
136133
addNameAndDescriptionToPom(project, mavenPublications);
137134
mavenPublications.configureEach(publication -> {
138-
// Add git origin info to generated POM files for internal builds
139-
publication.getPom().withXml(xml -> addScmInfo(xml, gitInfo.get()));
135+
publication.getPom().withXml(xml -> {
136+
// Add git origin info to generated POM files for internal builds
137+
addScmInfo(xml, gitInfo.get());
138+
});
140139
// have to defer this until archivesBaseName is set
141140
project.afterEvaluate(p -> publication.setArtifactId(archivesBaseName.get()));
142141
generatePomTask.configure(t -> t.dependsOn(generateMavenPoms));
143142
});
144143
}
145144

146-
/**
147-
* just ensure we put dependencies to the end. more a cosmetic thing than anything else
148-
* */
149-
private void formatDependencies(XmlProvider xml) {
150-
Element rootElement = xml.asElement();
151-
var dependencies = rootElement.getElementsByTagName("dependencies");
152-
if (dependencies.getLength() == 1 && dependencies.item(0) != null) {
153-
org.w3c.dom.Node item = dependencies.item(0);
154-
rootElement.removeChild(item);
155-
rootElement.appendChild(item);
156-
}
157-
}
158-
159145
private void addNameAndDescriptionToPom(Project project, NamedDomainObjectSet<MavenPublication> mavenPublications) {
160146
var name = project.getName();
161147
var description = providerFactory.provider(() -> project.getDescription() != null ? project.getDescription() : "");
162148
mavenPublications.configureEach(p -> p.getPom().withXml(xml -> {
163149
var root = xml.asNode();
164-
// Node versionNode = root.get("version");
165-
// versionNode.plus(1, "name", name);
166150
root.appendNode("name", name);
167151
root.appendNode("description", description.get());
168152
}));
@@ -209,4 +193,32 @@ static void configureSourcesJar(Project project) {
209193
project.getTasks().named(BasePlugin.ASSEMBLE_TASK_NAME).configure(t -> t.dependsOn(sourcesJarTask));
210194
});
211195
}
196+
197+
198+
/**
199+
* Format the generated pom files to be in a sort of reproducible order.
200+
*/
201+
private void formatGeneratedPom(Project project) {
202+
var publishing = project.getExtensions().getByType(PublishingExtension.class);
203+
final var mavenPublications = publishing.getPublications().withType(MavenPublication.class);
204+
mavenPublications.configureEach(publication -> {
205+
publication.getPom().withXml(xml -> {
206+
// Add some pom formatting
207+
formatDependencies(xml);
208+
});
209+
});
210+
}
211+
212+
/**
213+
* just ensure we put dependencies to the end. more a cosmetic thing than anything else
214+
* */
215+
private void formatDependencies(XmlProvider xml) {
216+
Element rootElement = xml.asElement();
217+
var dependencies = rootElement.getElementsByTagName("dependencies");
218+
if (dependencies.getLength() == 1 && dependencies.item(0) != null) {
219+
org.w3c.dom.Node item = dependencies.item(0);
220+
rootElement.removeChild(item);
221+
rootElement.appendChild(item);
222+
}
223+
}
212224
}

0 commit comments

Comments
 (0)