Index: core/src/main/java/hudson/ClassicPluginStrategy.java =================================================================== --- core/src/main/java/hudson/ClassicPluginStrategy.java (revision 33602) +++ core/src/main/java/hudson/ClassicPluginStrategy.java (working copy) @@ -170,13 +170,28 @@ ClassLoader dependencyLoader = new DependencyClassLoader(getBaseClassLoader(atts), archive, Util.join(dependencies,optionalDependencies)); return new PluginWrapper(pluginManager, archive, manifest, baseResourceURL, - createClassLoader(paths, dependencyLoader), disableFile, dependencies, optionalDependencies); + createClassLoader(paths, dependencyLoader, atts), disableFile, dependencies, optionalDependencies); } + + @Deprecated + protected ClassLoader createClassLoader(List paths, ClassLoader parent) throws IOException { + return createClassLoader( paths, parent, null ); + } /** * Creates the classloader that can load all the specified jar files and delegate to the given parent. */ - protected ClassLoader createClassLoader(List paths, ClassLoader parent) throws IOException { + protected ClassLoader createClassLoader(List paths, ClassLoader parent, Attributes atts) throws IOException { + if (atts != null) { + String usePluginFirstClassLoader = atts.getValue( "PluginFirstClassLoader" ); + if (Boolean.valueOf( usePluginFirstClassLoader )) { + PluginFirstClassLoader classLoader = new PluginFirstClassLoader(); + classLoader.setParentFirst( false ); + classLoader.setParent( parent ); + classLoader.addPathFiles(paths); + return classLoader; + } + } if(useAntClassLoader) { // using AntClassLoader with Closeable so that we can predictably release jar files opened by URLClassLoader AntClassLoader2 classLoader = new AntClassLoader2(parent); Index: core/src/main/java/hudson/security/Permission.java =================================================================== --- core/src/main/java/hudson/security/Permission.java (revision 33602) +++ core/src/main/java/hudson/security/Permission.java (working copy) @@ -52,7 +52,7 @@ /** * {@inheritDoc} */ - @Override + public int compare(Permission one, Permission two) { return one.getId().compareTo(two.getId()); } Index: core/src/main/java/hudson/PluginFirstClassLoader.java =================================================================== --- core/src/main/java/hudson/PluginFirstClassLoader.java (revision 0) +++ core/src/main/java/hudson/PluginFirstClassLoader.java (revision 0) @@ -0,0 +1,99 @@ +/* + * The MIT License + * + * Copyright (c) 2004-2009, Sun Microsystems, Inc., Olivier Lamy + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package hudson; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.List; + +import org.apache.tools.ant.AntClassLoader; + +/** + * @author olamy + * + */ +public class PluginFirstClassLoader + extends AntClassLoader + implements Closeable +{ + + private List urls = new ArrayList(); + + public void addPathFiles( Collection paths ) + throws IOException + { + for ( File f : paths ) + { + urls.add( f.toURI().toURL() ); + addPathFile( f ); + } + } + + public List getURLs() + { + return urls; + } + public void close() + throws IOException + { + cleanup(); + } + + @Override + protected Enumeration findResources( String arg0, boolean arg1 ) + throws IOException + { + Enumeration enu = super.findResources( arg0, arg1 ); + return enu; + } + + @Override + protected Enumeration findResources( String name ) + throws IOException + { + Enumeration enu = super.findResources( name ); + return enu; + } + + @Override + public URL getResource( String arg0 ) + { + URL url = super.getResource( arg0 ); + return url; + } + + @Override + public InputStream getResourceAsStream( String name ) + { + InputStream is = super.getResourceAsStream( name ); + return is; + } + +} Property changes on: core/src/main/java/hudson/PluginFirstClassLoader.java ___________________________________________________________________ Added: svn:executable + * Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Index: pom.xml =================================================================== --- pom.xml (revision 33602) +++ pom.xml (working copy) @@ -348,6 +348,36 @@ + + m2e + + target + + + + m2e.version + + + + ${m2BuildDirectory} + + + org.maven.ide.eclipse + lifecycle-mapping + 0.10.0 + + customizable + + + + + org.apache.maven.plugins:maven-resources-plugin:: + + + + + + Index: maven-agent/src/test/java/hudson/maven/agent/RunCommand.java =================================================================== --- maven-agent/src/test/java/hudson/maven/agent/RunCommand.java (revision 33602) +++ maven-agent/src/test/java/hudson/maven/agent/RunCommand.java (working copy) @@ -40,7 +40,7 @@ */ public class RunCommand implements Callable { private final String[] args; - + public RunCommand(String[] args) { this.args = args; }