From e5b7f8c39383076a56063938479d823a456ad44e Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 9 Jun 2023 09:23:41 +0200 Subject: [PATCH] [MARTIFACT-49] Supports the build/consumer feature (#18) --- .../artifact/buildinfo/BuildInfoWriter.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java index 6c09395..cb3d46d 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java @@ -23,6 +23,9 @@ import java.io.InputStream; import java.io.PrintWriter; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; @@ -162,6 +165,12 @@ void printArtifacts(MavenProject project) throws MojoExecutionException { p.println(prefix + "coordinates=" + project.getGroupId() + ':' + project.getArtifactId()); } + // detect Maven 4 consumer POM transient attachment + Artifact consumerPom = project.getAttachedArtifacts().stream() + .filter(a -> "pom".equals(a.getType()) && "consumer".equals(a.getClassifier())) + .findAny() + .orElse(null); + int n = 0; Artifact pomArtifact = new DefaultArtifact( project.getGroupId(), @@ -171,13 +180,25 @@ void printArtifacts(MavenProject project) throws MojoExecutionException { "pom", "", artifactHandlerManager.getArtifactHandler("pom")); - pomArtifact.setFile(project.getFile()); + if (consumerPom != null) { + // Maven 4 transient consumer POM attachment is published as the POM, overrides build POM, see + // https://github.com/apache/maven/blob/c79a7a02721f0f9fd7e202e99f60b593461ba8cc/maven-core/src/main/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformer.java#L130-L155 + try { + Path pomFile = Files.createTempFile(Paths.get(project.getBuild().getDirectory()), "consumer-", ".pom"); + Files.copy(consumerPom.getFile().toPath(), pomFile, StandardCopyOption.REPLACE_EXISTING); + pomArtifact.setFile(pomFile.toFile()); + } catch (IOException e) { + p.println("Error processing consumer POM: " + e); + } + } else { + pomArtifact.setFile(project.getFile()); + } artifacts.put(pomArtifact, prefix + n); printFile( prefix + n++, pomArtifact.getGroupId(), - project.getFile(), + pomArtifact.getFile(), project.getArtifactId() + '-' + project.getVersion() + ".pom"); if (project.getArtifact() == null) { @@ -189,6 +210,10 @@ void printArtifacts(MavenProject project) throws MojoExecutionException { } for (Artifact attached : project.getAttachedArtifacts()) { + if (attached == consumerPom) { + // ignore consumer pom + continue; + } if (attached.getType().endsWith(".asc")) { // ignore pgp signatures continue;