Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'master' into JENKINS-14362-jzlib
Originally-Committed-As: dedb24ef034a04fea288eaa50089e8e774714e99
  • Loading branch information
jglick committed Jun 11, 2013
2 parents bb9cdba + e8a603a commit 14863a0
Show file tree
Hide file tree
Showing 24 changed files with 657 additions and 231 deletions.
22 changes: 11 additions & 11 deletions pom.xml
Expand Up @@ -29,7 +29,7 @@ THE SOFTWARE.
<parent>
<groupId>org.jenkins-ci.main</groupId>
<artifactId>pom</artifactId>
<version>1.513</version>
<version>1.520-SNAPSHOT</version>
</parent>

<artifactId>maven-plugin</artifactId>
Expand All @@ -41,7 +41,7 @@ THE SOFTWARE.
<url>http://wiki.jenkins-ci.org/display/JENKINS/Maven+2+Project+Plugin</url>

<properties>
<mavenInterceptorsVersion>1.2</mavenInterceptorsVersion>
<mavenInterceptorsVersion>1.3</mavenInterceptorsVersion>
<mavenVersion>3.0.5</mavenVersion>
<maven.version>${mavenVersion}</maven.version>
<aetherVersion>1.13.1</aetherVersion>
Expand Down Expand Up @@ -69,7 +69,7 @@ THE SOFTWARE.
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>mailer</artifactId>
<version>1.3</version>
<version>1.5</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
Expand Down Expand Up @@ -359,17 +359,17 @@ THE SOFTWARE.
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<scope>test</scope>
</dependency>
<dependency>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<scope>test</scope>
</dependency>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<scope>test</scope>
</dependency>

</dependencies>

Expand Down
22 changes: 18 additions & 4 deletions src/main/java/hudson/maven/AbstractMavenProcessFactory.java
Expand Up @@ -69,6 +69,11 @@
*/

/**
* Launches the maven process.
*
* This class captures the common part, and {@link MavenProcessFactory} and {@link Maven3ProcessFactory}
* adds Maven2/Maven3 flavors to it to make it concrete.
*
* @author Olivier Lamy
*/
public abstract class AbstractMavenProcessFactory
Expand Down Expand Up @@ -234,11 +239,14 @@ public ProcessCache.NewProcess newProcess(BuildListener listener, OutputStream o
throw e;
}

return new NewProcess(
Channels.forProcess("Channel to Maven "+ Arrays.toString(cmds),
Channel ch = Channels.forProcess("Channel to Maven " + Arrays.toString(cmds),
Computer.threadPoolForRemoting, new BufferedInputStream(con.in), new BufferedOutputStream(con.out),
listener.getLogger(), proc),
proc);
listener.getLogger(), proc);

if (!PlexusModuleContributor.all().isEmpty())
applyPlexusModuleContributor(ch);

return new NewProcess(ch,proc);
} catch (IOException e) {
if(fixNull(e.getMessage()).contains("java: not found")) {
// diagnose issue #659
Expand All @@ -250,6 +258,12 @@ Computer.threadPoolForRemoting, new BufferedInputStream(con.in), new BufferedOut
}
}

/**
* Apply extension plexus modules to the newly launched Maven process.
* @since 1.519
*/
protected abstract void applyPlexusModuleContributor(Channel channel) throws InterruptedException, IOException;

/**
* Builds the command line argument list to launch the maven process.
*/
Expand Down
57 changes: 57 additions & 0 deletions src/main/java/hudson/maven/AggregatingClassLoader.java
@@ -0,0 +1,57 @@
package hudson.maven;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

/**
* ClassLoader that delegates to multiple side classloaders, in addition to the parent.
*
* The side classloaders generally need to be carefully crafted
* to avoid classloader constraint violations.
*
* @author Kohsuke Kawaguchi
*/
class AggregatingClassLoader extends ClassLoader {
private final List<ClassLoader> sides;

public AggregatingClassLoader(ClassLoader parent, List<ClassLoader> sides) {
super(parent);
this.sides = new ArrayList<ClassLoader>(sides);
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
for (ClassLoader cl : sides) {
try {
return cl.loadClass(name);
} catch (ClassNotFoundException e) {
//not found. try next
}
}
// not found in any of the classloader. delegate.
throw new ClassNotFoundException(name);
}

@Override
protected URL findResource(String name) {
for (ClassLoader cl : sides) {
URL url = cl.getResource(name);
if (url!=null)
return url;
}
return null;
}

@Override
protected Enumeration<URL> findResources(String name) throws IOException {
List<URL> resources = new ArrayList<URL>();
for (ClassLoader cl : sides) {
resources.addAll(Collections.list(cl.getResources(name)));
}
return Collections.enumeration(resources);
}
}
9 changes: 7 additions & 2 deletions src/main/java/hudson/maven/Maven3Builder.java
Expand Up @@ -95,8 +95,8 @@ public Result call() throws IOException {
registerSystemProperties();

listener.getLogger().println(formatArgs(goals));


int r = Maven3Main.launch( goals.toArray(new String[goals.size()]));

// now check the completion status of async ops
Expand Down Expand Up @@ -160,6 +160,9 @@ public Result call() throws IOException {
throw new IOException2(e);
} catch (Exception e) {
throw new IOException2(e);
} finally {
if (DUMP_PERFORMANCE_COUNTERS)
Channel.current().dumpPerformanceCounters(listener.error("Remoting stats"));
}
}

Expand Down Expand Up @@ -571,4 +574,6 @@ private String mojoExec(ExecutionEvent event) {
private static final long serialVersionUID = 1L;

private static final Logger LOGGER = Logger.getLogger(Maven3Builder.class.getName());

public static boolean DUMP_PERFORMANCE_COUNTERS = Boolean.getBoolean(Maven3Builder.class.getName()+".dumpPerformanceCounters");
}
20 changes: 20 additions & 0 deletions src/main/java/hudson/maven/Maven3ProcessFactory.java
Expand Up @@ -26,16 +26,19 @@
import hudson.EnvVars;
import hudson.FilePath;
import hudson.Launcher;
import hudson.maven.agent.Main;
import hudson.model.BuildListener;
import hudson.model.Run.RunnerAbortedException;
import hudson.model.TaskListener;
import hudson.remoting.Callable;
import hudson.remoting.Channel;
import hudson.remoting.Which;
import hudson.tasks.Maven.MavenInstallation;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.URL;

import org.jvnet.hudson.maven3.agent.Maven3Main;
import org.jvnet.hudson.maven3.launcher.Maven3Launcher;
Expand Down Expand Up @@ -78,6 +81,23 @@ protected String getMavenInterceptorOverride(MavenInstallation mvn,
return null;
}

@Override
protected void applyPlexusModuleContributor(Channel channel) throws InterruptedException, IOException {
channel.call(new InstallPlexusModulesTask());
}

private static final class InstallPlexusModulesTask implements Callable<Void,IOException> {
PlexusModuleContributor c = PlexusModuleContributor.aggregate();

public Void call() throws IOException {
Maven3Main.addPlexusComponents(c.getPlexusComponentJars().toArray(new URL[0]));
return null;
}

private static final long serialVersionUID = 1L;
}


/**
* Finds classworlds.jar
*/
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/hudson/maven/MavenBuildInformation.java
Expand Up @@ -21,9 +21,13 @@
*/

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.versioning.ComparableVersion;
import org.apache.maven.model.Model;
import org.apache.maven.project.MavenProject;

/**
* @author Olivier Lamy
Expand All @@ -33,6 +37,15 @@ public class MavenBuildInformation implements Serializable {

private static final long serialVersionUID = -3719709179508200057L;
private String mavenVersion;
/**
* Map of model IDs to IDs of the model parents (if defined).
* @see MavenProject#getId
* @see Model#getId
* @see MavenProject#getParent
* @see Model#getParent
* @since 1.515
*/
public final Map<String,String> modelParents = new HashMap<String,String>();

public MavenBuildInformation(String mavenVersion) {
this.mavenVersion = mavenVersion;
Expand Down

0 comments on commit 14863a0

Please sign in to comment.