diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java index 2dda34a036..0abe1d3967 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/AetherPluginHandler.java @@ -53,7 +53,6 @@ import org.sonatype.aether.impl.ArtifactDescriptorReader; import org.sonatype.aether.impl.VersionRangeResolver; import org.sonatype.aether.impl.VersionResolver; import org.sonatype.aether.impl.internal.DefaultServiceLocator; -import org.sonatype.aether.repository.Authentication; import org.sonatype.aether.repository.LocalRepository; import org.sonatype.aether.repository.Proxy; import org.sonatype.aether.repository.RemoteRepository; @@ -217,12 +216,12 @@ public class AetherPluginHandler if (configuration.isEnableProxy()) { - Proxy proxy = createProxy(); + Proxy proxy = DefaultProxySelector.createProxy(configuration); if (logger.isDebugEnabled()) { - logger.debug("enable proxy {} for {}", repository.getUrl(), - proxy.getHost()); + logger.debug("enable proxy {} for {}", proxy.getHost(), + repository.getUrl()); } rr.setProxy(proxy); @@ -248,6 +247,16 @@ public class AetherPluginHandler remoteRepositories); MavenRepositorySystemSession session = new MavenRepositorySystemSession(); + if (configuration.isEnableProxy()) + { + if (logger.isDebugEnabled()) + { + logger.debug("enable proxy selector to collect dependencies"); + } + + session.setProxySelector(new DefaultProxySelector(configuration)); + } + session.setLocalRepositoryManager( repositorySystem.newLocalRepositoryManager(localRepository)); @@ -315,28 +324,6 @@ public class AetherPluginHandler return classpathSet; } - /** - * Method description - * - * - * @return - */ - private Proxy createProxy() - { - Authentication authentication = null; - String username = configuration.getProxyUser(); - String password = configuration.getProxyPassword(); - - if (Util.isNotEmpty(username) || Util.isNotEmpty(password)) - { - authentication = new Authentication(Util.nonNull(username), - Util.nonNull(password)); - } - - return new Proxy(Proxy.TYPE_HTTP, configuration.getProxyServer(), - configuration.getProxyPort(), authentication); - } - /** * Method description * diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultProxySelector.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultProxySelector.java new file mode 100644 index 0000000000..616b5b9308 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultProxySelector.java @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. 2. Redistributions in + * binary form must reproduce the above copyright notice, this list of + * conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. 3. Neither the name of SCM-Manager; + * nor the names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.plugin; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.sonatype.aether.repository.Authentication; +import org.sonatype.aether.repository.Proxy; +import org.sonatype.aether.repository.ProxySelector; +import org.sonatype.aether.repository.RemoteRepository; + +import sonia.scm.config.ScmConfiguration; +import sonia.scm.util.Util; + +/** + * + * @author Sebastian Sdorra + */ +public class DefaultProxySelector implements ProxySelector +{ + + /** + * the logger for DefaultProxySelector + */ + private static final Logger logger = + LoggerFactory.getLogger(DefaultProxySelector.class); + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + * + * @param configuration + */ + public DefaultProxySelector(ScmConfiguration configuration) + { + this.configuration = configuration; + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * + * @param configuration + * @return + */ + public static Proxy createProxy(ScmConfiguration configuration) + { + Authentication authentication = null; + String username = configuration.getProxyUser(); + String password = configuration.getProxyPassword(); + + if (Util.isNotEmpty(username) || Util.isNotEmpty(password)) + { + authentication = new Authentication(Util.nonNull(username), + Util.nonNull(password)); + } + + return new Proxy(Proxy.TYPE_HTTP, configuration.getProxyServer(), + configuration.getProxyPort(), authentication); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @param repository + * + * @return + */ + @Override + public Proxy getProxy(RemoteRepository repository) + { + Proxy proxy = createProxy(configuration); + + if (logger.isDebugEnabled()) + { + logger.debug("enable proxy {} for {}", proxy.getHost(), + repository.getUrl()); + } + + return proxy; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private ScmConfiguration configuration; +}