From 7dc2652349b2e94de23d024cf1ad69309f3c92e0 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Wed, 23 Feb 2011 00:36:48 +0100 Subject: [PATCH] [JENKINS-8711] Post build action deploy to maven repository can fail using "private maven repository" option --- .../java/hudson/maven/RedeployPublisher.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/maven-plugin/src/main/java/hudson/maven/RedeployPublisher.java b/maven-plugin/src/main/java/hudson/maven/RedeployPublisher.java index 183fa3d3a4..f77f8d937c 100644 --- a/maven-plugin/src/main/java/hudson/maven/RedeployPublisher.java +++ b/maven-plugin/src/main/java/hudson/maven/RedeployPublisher.java @@ -30,16 +30,22 @@ import hudson.maven.reporters.MavenAbstractArtifactRecord; import hudson.model.AbstractBuild; import hudson.model.AbstractProject; import hudson.model.BuildListener; +import hudson.model.Hudson; import hudson.model.Result; +import hudson.model.TaskListener; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.BuildStepMonitor; import hudson.tasks.Publisher; import hudson.tasks.Recorder; +import hudson.tasks.Maven.MavenInstallation; +import hudson.tasks.Maven.ProjectWithMaven; import hudson.util.FormValidation; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Properties; import java.util.Map.Entry; import net.sf.json.JSONObject; @@ -115,7 +121,7 @@ public class RedeployPublisher extends Recorder { listener.getLogger().println("Deploying artifacts to "+url); try { - MavenEmbedder embedder = MavenUtil.createEmbedder(listener,build); + MavenEmbedder embedder = createEmbedder(listener,build); ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) embedder.lookup( ArtifactRepositoryLayout.ROLE,"default"); ArtifactRepositoryFactory factory = @@ -140,7 +146,37 @@ public class RedeployPublisher extends Recorder { return true; } - + /** + * + * copy from MavenUtil but here we have to ignore localRepo path and setting as thoses paths comes + * from the remote node and can not exist in master see http://issues.jenkins-ci.org/browse/JENKINS-8711 + * + */ + private MavenEmbedder createEmbedder(TaskListener listener, AbstractBuild build) throws MavenEmbedderException, IOException, InterruptedException { + MavenInstallation m=null; + File settingsLoc = null; + String profiles = null; + Properties systemProperties = null; + String privateRepository = null; + + AbstractProject project = build.getProject(); + + if (project instanceof ProjectWithMaven) { + m = ((ProjectWithMaven) project).inferMavenInstallation().forNode(Hudson.getInstance(),listener); + } + if (project instanceof MavenModuleSet) { + profiles = ((MavenModuleSet) project).getProfiles(); + systemProperties = ((MavenModuleSet) project).getMavenProperties(); + } + + return MavenUtil.createEmbedder(new MavenEmbedderRequest(listener, + m!=null?m.getHomeDir():null, + profiles, + systemProperties, + privateRepository, + settingsLoc )); + } + /** * Obtains the {@link MavenAbstractArtifactRecord} that we'll work on.