From 3da33658f9156145fb215fb4a217336bcc9362e6 Mon Sep 17 00:00:00 2001 From: Jared Stehler Date: Thu, 12 Oct 2023 10:54:46 -0400 Subject: [PATCH] merge resolved artifacts back into project model --- .../plugins/deploy/AbstractDeployMojo.java | 45 ++++++++++++++++++- .../maven/plugins/deploy/DeployFileMojo.java | 5 ++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java b/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java index 2c5c1d9c..e7519ec3 100644 --- a/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java +++ b/src/main/java/org/apache/maven/plugins/deploy/AbstractDeployMojo.java @@ -18,15 +18,22 @@ */ package org.apache.maven.plugins.deploy; +import java.util.Objects; +import java.util.Optional; + +import org.apache.maven.RepositoryUtils; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; import org.apache.maven.rtinfo.RuntimeInformation; import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.deployment.DeployRequest; +import org.eclipse.aether.deployment.DeployResult; import org.eclipse.aether.deployment.DeploymentException; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.util.version.GenericVersionScheme; @@ -136,7 +143,8 @@ protected void deploy(DeployRequest deployRequest) throws MojoExecutionException getLog().info("Retrying deployment attempt " + (count + 1) + " of " + retryFailedDeploymentCounter); } - repositorySystem.deploy(session.getRepositorySession(), deployRequest); + DeployResult deployResult = repositorySystem.deploy(session.getRepositorySession(), deployRequest); + mergeResolvedArtifacts(deployResult); exception = null; break; } catch (DeploymentException e) { @@ -153,4 +161,39 @@ protected void deploy(DeployRequest deployRequest) throws MojoExecutionException throw new MojoExecutionException(exception.getMessage(), exception); } } + + protected void mergeResolvedArtifacts(DeployResult deployResult) { + for (Artifact resolvedArtifact : deployResult.getArtifacts()) { + Optional projectMaybe = session.getAllProjects().stream() + .filter(p -> Objects.equals(resolvedArtifact.getGroupId(), p.getGroupId()) + && Objects.equals(resolvedArtifact.getArtifactId(), p.getArtifactId())) + .findFirst(); + + if (projectMaybe.isPresent()) { + MavenProject project = projectMaybe.get(); + + if (isMatch(resolvedArtifact, project.getArtifact())) { + project.setArtifact(RepositoryUtils.toArtifact(resolvedArtifact)); + } else { + for (int i = 0; i < project.getAttachedArtifacts().size(); i++) { + if (isMatch( + resolvedArtifact, project.getAttachedArtifacts().get(i))) { + project.getAttachedArtifacts().set(i, RepositoryUtils.toArtifact(resolvedArtifact)); + break; + } + } + } + } + } + } + + private static boolean isMatch(Artifact a, org.apache.maven.artifact.Artifact modelArtifact) { + return Objects.equals(modelArtifact.getGroupId(), a.getGroupId()) + && Objects.equals(modelArtifact.getArtifactId(), a.getArtifactId()) + && Objects.equals( + modelArtifact.getType(), + Optional.ofNullable(a.getProperties().get("type")).orElse(null)) + && Objects.equals( + Optional.ofNullable(modelArtifact.getClassifier()).orElse(""), a.getClassifier()); + } } diff --git a/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java b/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java index aeaf5f77..f786e423 100644 --- a/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java +++ b/src/main/java/org/apache/maven/plugins/deploy/DeployFileMojo.java @@ -52,6 +52,7 @@ import org.eclipse.aether.artifact.ArtifactType; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.deployment.DeployRequest; +import org.eclipse.aether.deployment.DeployResult; import org.eclipse.aether.deployment.DeploymentException; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.util.artifact.SubArtifact; @@ -373,7 +374,9 @@ public void execute() throws MojoExecutionException, MojoFailureException { } try { - repositorySystem.deploy(session.getRepositorySession(), deployRequest); + DeployResult deployResult = repositorySystem.deploy(session.getRepositorySession(), deployRequest); + mergeResolvedArtifacts(deployResult); + } catch (DeploymentException e) { throw new MojoExecutionException(e.getMessage(), e); } finally {