[gradle] Add support for custom Wagon providers

Mikolaj Izdebski mizdebsk at fedoraproject.org
Mon Nov 24 15:58:48 UTC 2014


commit 10ea43cf69cec5d468da350723571a346b8165b1
Author: Mikolaj Izdebski <mizdebsk at redhat.com>
Date:   Mon Nov 24 16:09:38 2014 +0100

    Add support for custom Wagon providers

 ...-Port-to-Maven-3.1.1-and-Aether-Ant-Tasks.patch |  201 +++++++++++++++-----
 0007-Remove-Class-Path-from-manifest.patch         |    2 +-
 ...-Implement-XMvn-repository-factory-method.patch |    2 +-
 ...e-command-as-fallback-way-of-getting-buil.patch |    2 +-
 gradle.spec                                        |    5 +-
 5 files changed, 162 insertions(+), 50 deletions(-)
---
diff --git a/0006-Port-to-Maven-3.1.1-and-Aether-Ant-Tasks.patch b/0006-Port-to-Maven-3.1.1-and-Aether-Ant-Tasks.patch
index 10d2438..5740be8 100644
--- a/0006-Port-to-Maven-3.1.1-and-Aether-Ant-Tasks.patch
+++ b/0006-Port-to-Maven-3.1.1-and-Aether-Ant-Tasks.patch
@@ -1,41 +1,43 @@
-From 9d8b819bc14071dd64fcc4a56a2111a74e563a77 Mon Sep 17 00:00:00 2001
+From 60c0c212e1de552613b530d707c863ccba3d2626 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Fri, 31 Oct 2014 09:23:37 +0100
 Subject: [PATCH 6/9] Port to Maven 3.1.1 and Aether Ant Tasks
 
 ---
- gradle/dependencies.gradle                         | 57 +++++++++++++-------
+ gradle/dependencies.gradle                         | 57 ++++++++++-----
  .../plugins/internal/maven/Maven2Gradle.groovy     |  2 +-
  .../internal/maven/MavenProjectXmlWriter.java      |  4 +-
- .../internal/maven/MavenProjectsCreator.java       | 24 ++++-----
- .../dependency-management.gradle                   |  7 +--
- .../internal/artifacts/PlexusLoggerAdapter.java    |  8 +++
+ .../internal/maven/MavenProjectsCreator.java       | 24 +++---
+ .../dependency-management.gradle                   |  7 +-
+ .../internal/artifacts/PlexusLoggerAdapter.java    |  8 ++
  .../DefaultLocalMavenRepositoryLocator.java        |  4 +-
  .../mvnsettings/DefaultMavenSettingsProvider.java  |  4 +-
  .../mvnsettings/MavenSettingsProvider.java         |  4 +-
- .../maven/internal/DefaultMavenPom.java            |  6 +--
- .../maven/internal/ant/AbstractMavenResolver.java  | 63 +++++++++++++---------
- .../maven/internal/ant/BaseMavenDeployer.java      | 36 +++++++------
- .../maven/internal/ant/BaseMavenInstaller.java     | 12 ++---
- .../maven/internal/ant/CustomDeployTask.java       | 45 ----------------
- .../ant/CustomInstallDeployTaskSupport.java        | 27 ----------
- .../maven/internal/ant/CustomInstallTask.java      | 38 -------------
- .../internal/ant/EmptyMavenSettingsSupplier.java   |  9 ++--
- .../maven/internal/ant/LoggingHelper.java          | 43 ---------------
+ .../maven/internal/DefaultMavenPom.java            |  6 +-
+ .../maven/internal/ant/AbstractMavenResolver.java  | 63 ++++++++++------
+ .../maven/internal/ant/BaseMavenDeployer.java      | 85 +++++++++++++++++-----
+ .../maven/internal/ant/BaseMavenInstaller.java     | 12 +--
+ .../maven/internal/ant/CustomDeployTask.java       | 45 ------------
+ .../ant/CustomInstallDeployTaskSupport.java        | 27 -------
+ .../maven/internal/ant/CustomInstallTask.java      | 38 ----------
+ .../internal/ant/EmptyMavenSettingsSupplier.java   |  9 ++-
+ .../maven/internal/ant/GradleWagonProvider.java    | 38 ++++++++++
+ .../maven/internal/ant/LoggingHelper.java          | 43 -----------
  .../maven/internal/ant/MavenSettingsSupplier.java  |  4 +-
- .../ant/MaybeUserMavenSettingsSupplier.java        | 11 ++--
+ .../ant/MaybeUserMavenSettingsSupplier.java        | 11 ++-
  .../ProjectDependencyArtifactIdExtractorHack.java  |  3 +-
- .../maven/internal/ant/RepositoryBuilder.java      | 24 ++++++---
- .../maven/internal/ant/RepositoryFactory.java      | 16 +++---
- .../AbstractAntTaskBackedMavenPublisher.java       | 58 +++++++-------------
- .../AntTaskBackedMavenLocalPublisher.java          | 41 ++++----------
- .../publisher/AntTaskBackedMavenPublisher.java     | 49 ++++++-----------
- .../publisher/MavenRemoteRepositoryFactory.java    |  6 +--
- .../publisher/ValidatingMavenPublisher.java        |  6 +--
- 28 files changed, 233 insertions(+), 378 deletions(-)
+ .../maven/internal/ant/RepositoryBuilder.java      | 24 ++++--
+ .../maven/internal/ant/RepositoryFactory.java      | 19 +++--
+ .../AbstractAntTaskBackedMavenPublisher.java       | 58 +++++----------
+ .../AntTaskBackedMavenLocalPublisher.java          | 41 +++--------
+ .../publisher/AntTaskBackedMavenPublisher.java     | 49 +++++--------
+ .../publisher/MavenRemoteRepositoryFactory.java    |  6 +-
+ .../publisher/ValidatingMavenPublisher.java        |  6 +-
+ 29 files changed, 319 insertions(+), 382 deletions(-)
  delete mode 100644 subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/CustomDeployTask.java
  delete mode 100644 subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/CustomInstallDeployTaskSupport.java
  delete mode 100644 subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/CustomInstallTask.java
+ create mode 100644 subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/GradleWagonProvider.java
  delete mode 100644 subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/LoggingHelper.java
 
 diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle
@@ -409,10 +411,17 @@ index 854202f..a912403 100644
      }
  
 diff --git a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/BaseMavenDeployer.java b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/BaseMavenDeployer.java
-index 35b0e95..4fcbc4a 100644
+index 35b0e95..fe7adf9 100644
 --- a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/BaseMavenDeployer.java
 +++ b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/BaseMavenDeployer.java
-@@ -15,12 +15,10 @@
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright 2007-2008 the original author or authors.
++ * Copyright 2007-2014 the original author or authors.
+  *
+  * Licensed under the Apache License, Version 2.0 (the "License");
+  * you may not use this file except in compliance with the License.
+@@ -15,12 +15,24 @@
   */
  package org.gradle.api.publication.maven.internal.ant;
  
@@ -420,59 +429,110 @@ index 35b0e95..4fcbc4a 100644
 -import org.apache.maven.artifact.ant.InstallDeployTaskSupport;
 -import org.apache.maven.artifact.ant.RemoteRepository;
  import org.apache.tools.ant.Project;
--import org.codehaus.plexus.PlexusContainer;
--import org.codehaus.plexus.PlexusContainerException;
++import org.codehaus.plexus.ContainerConfiguration;
++import org.codehaus.plexus.DefaultContainerConfiguration;
++import org.codehaus.plexus.DefaultPlexusContainer;
+ import org.codehaus.plexus.PlexusContainer;
+ import org.codehaus.plexus.PlexusContainerException;
++import org.codehaus.plexus.classworlds.ClassWorld;
++import org.codehaus.plexus.classworlds.realm.ClassRealm;
++import org.eclipse.aether.impl.DefaultServiceLocator;
++import org.eclipse.aether.internal.ant.AntRepoSys;
 +import org.eclipse.aether.internal.ant.tasks.AbstractDistTask;
 +import org.eclipse.aether.internal.ant.tasks.Deploy;
 +import org.eclipse.aether.internal.ant.types.RemoteRepository;
++import org.eclipse.aether.internal.transport.wagon.PlexusWagonConfigurator;
++import org.eclipse.aether.spi.connector.transport.TransporterFactory;
++import org.eclipse.aether.transport.wagon.WagonConfigurator;
++import org.eclipse.aether.transport.wagon.WagonProvider;
++import org.eclipse.aether.transport.wagon.WagonTransporterFactory;
  import org.gradle.api.artifacts.Configuration;
  import org.gradle.api.artifacts.maven.MavenDeployer;
  import org.gradle.api.artifacts.maven.PomFilterContainer;
-@@ -48,37 +46,43 @@ public class BaseMavenDeployer extends AbstractMavenResolver implements MavenDep
+@@ -28,6 +40,8 @@ import org.gradle.api.publication.maven.internal.ArtifactPomContainer;
+ import org.gradle.logging.LoggingManagerInternal;
+ 
+ import java.io.File;
++import java.lang.reflect.Field;
++import java.net.MalformedURLException;
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.List;
+@@ -48,37 +62,68 @@ public class BaseMavenDeployer extends AbstractMavenResolver implements MavenDep
          super(pomFilterContainer, artifactPomContainer, loggingManager);
      }
  
 -    protected InstallDeployTaskSupport createPreConfiguredTask(Project project) {
 -        CustomDeployTask deployTask = createTask();
 +    protected AbstractDistTask createPreConfiguredTask(Project project) {
++        configureAetherRepoSys(project);
 +        Deploy deployTask = createTask();
          deployTask.setProject(project);
 -        deployTask.setUniqueVersion(isUniqueVersion());
+-        addProtocolProvider(deployTask);
 +        // XXX
 +        //deployTask.setUniqueVersion(isUniqueVersion());
-         addProtocolProvider(deployTask);
          addRemoteRepositories(deployTask);
          return deployTask;
      }
  
 -    protected CustomDeployTask createTask() {
 -        return new CustomDeployTask();
-+    protected Deploy createTask() {
-+        return new Deploy();
++    private void configureAetherRepoSys(Project project) {
++        PlexusContainer container = createContainer();
++
++        try {
++            AntRepoSys repoSys = AntRepoSys.getInstance(project);
++            Field field = repoSys.getClass().getDeclaredField("locator");
++            field.setAccessible(true);
++            DefaultServiceLocator locator = (DefaultServiceLocator) field.get(repoSys);
++            locator.addService(TransporterFactory.class, WagonTransporterFactory.class);
++            locator.addService(WagonProvider.class, GradleWagonProvider.class);
++            locator.addService(WagonConfigurator.class, PlexusWagonConfigurator.class);
++
++            GradleWagonProvider wagonProvider = (GradleWagonProvider) locator.getService(WagonProvider.class);
++            wagonProvider.initService(container);
++        } catch (ReflectiveOperationException e) {
++            throw new RuntimeException(e);
++        }
      }
  
 -    private void addProtocolProvider(CustomDeployTask deployTask) {
-+    private void addProtocolProvider(Deploy deployTask) {
-+        //XXX
-+        /*
-         PlexusContainer plexusContainer = deployTask.getContainer();
-         for (File wagonProviderJar : getJars()) {
-             try {
+-        PlexusContainer plexusContainer = deployTask.getContainer();
+-        for (File wagonProviderJar : getJars()) {
+-            try {
 -                plexusContainer.addJarResource(wagonProviderJar);
 -            } catch (PlexusContainerException e) {
-+                plexusContainer.getLookupRealm().addURL(wagonProviderJar.toURI().toURL());
-+            } catch (java.net.MalformedURLException e) {
-                 throw new RuntimeException(e);
+-                throw new RuntimeException(e);
++    private PlexusContainer createContainer() {
++        try {
++            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
++            ClassWorld world = new ClassWorld("plexus.core", classLoader);
++            ClassRealm realm = new ClassRealm(world, "plexus.core", classLoader);
++            for (File wagonProviderJar : getJars()) {
++                realm.addURL(wagonProviderJar.toURI().toURL());
              }
++
++            ContainerConfiguration conf = new DefaultContainerConfiguration();
++            conf.setClassWorld(world);
++            conf.setRealm(realm);
++            conf.setName("plexus.core");
++
++            return new DefaultPlexusContainer(conf);
++        } catch (PlexusContainerException e) {
++            throw new RuntimeException(e);
++        } catch (MalformedURLException e) {
++            throw new RuntimeException(e);
          }
-+        */
      }
  
-+    /*
++    protected Deploy createTask() {
++        return new Deploy();
++    }
++
      private List<File> getJars() {
          return configuration != null ? new ArrayList<File>(configuration.resolve()) : protocolProviderJars;
      }
-+    */
  
 -    private void addRemoteRepositories(DeployTask deployTask) {
 -        deployTask.addRemoteRepository(remoteRepository);
@@ -679,6 +739,50 @@ index 5549dcb..0119703 100644
      }
  
      public void done() {
+diff --git a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/GradleWagonProvider.java b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/GradleWagonProvider.java
+new file mode 100644
+index 0000000..cfab163
+--- /dev/null
++++ b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/GradleWagonProvider.java
+@@ -0,0 +1,38 @@
++/*
++ * Copyright 2014 the original author or authors.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ *      http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++package org.gradle.api.publication.maven.internal.ant;
++
++import org.apache.maven.wagon.Wagon;
++import org.codehaus.plexus.PlexusContainer;
++import org.eclipse.aether.internal.transport.wagon.PlexusWagonProvider;
++import org.eclipse.aether.transport.wagon.WagonProvider;
++
++public class GradleWagonProvider implements WagonProvider {
++
++    private WagonProvider delegate;
++
++    public void initService(PlexusContainer container) {
++        delegate = new PlexusWagonProvider(container);
++    }
++
++    public Wagon lookup(String roleHint) throws Exception {
++        return delegate.lookup(roleHint);
++    }
++
++    public void release(Wagon wagon) {
++        delegate.release(wagon);
++    }
++}
 diff --git a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/LoggingHelper.java b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/LoggingHelper.java
 deleted file mode 100644
 index 248f839..0000000
@@ -840,13 +944,15 @@ index bff4576..97afd1e 100644
      }
  }
 diff --git a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/RepositoryFactory.java b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/RepositoryFactory.java
-index e3517aa..2089be6 100644
+index e3517aa..f98e753 100644
 --- a/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/RepositoryFactory.java
 +++ b/subprojects/maven/src/main/groovy/org/gradle/api/publication/maven/internal/ant/RepositoryFactory.java
-@@ -15,12 +15,11 @@
+@@ -15,12 +15,13 @@
   */
  package org.gradle.api.publication.maven.internal.ant;
  
++import java.util.UUID;
++
 +import org.eclipse.aether.internal.ant.types.Authentication;
 +import org.eclipse.aether.internal.ant.types.RemoteRepository;
 +
@@ -859,8 +965,11 @@ index e3517aa..2089be6 100644
  
  public class RepositoryFactory extends BeanFactory {
      public RepositoryFactory(Class klass) {
-@@ -34,13 +33,16 @@ public class RepositoryFactory extends BeanFactory {
+@@ -32,15 +33,19 @@ public class RepositoryFactory extends BeanFactory {
+     }
+ 
      public void setChild(FactoryBuilderSupport builder, Object parent, Object child) {
++        getRepository(parent).setId(UUID.randomUUID().toString());
          if (child instanceof Authentication) {
              getRepository(parent).addAuthentication((Authentication) child);
 +        // XXX
diff --git a/0007-Remove-Class-Path-from-manifest.patch b/0007-Remove-Class-Path-from-manifest.patch
index 9402a21..918c868 100644
--- a/0007-Remove-Class-Path-from-manifest.patch
+++ b/0007-Remove-Class-Path-from-manifest.patch
@@ -1,4 +1,4 @@
-From cc4fed093efeb23cb0650cf8cf7507643a0e7cad Mon Sep 17 00:00:00 2001
+From 9de91e7cecaafd4051e552578df58330d3828501 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Sun, 9 Nov 2014 17:52:30 +0100
 Subject: [PATCH 7/9] Remove Class-Path from manifest
diff --git a/0008-Implement-XMvn-repository-factory-method.patch b/0008-Implement-XMvn-repository-factory-method.patch
index c7a0b0a..bf69129 100644
--- a/0008-Implement-XMvn-repository-factory-method.patch
+++ b/0008-Implement-XMvn-repository-factory-method.patch
@@ -1,4 +1,4 @@
-From 21a9486b77acec7381ec319dde0ef99c92ea039a Mon Sep 17 00:00:00 2001
+From 79ff2731194cd069b51948ade986898fe1a9cda4 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Sun, 9 Nov 2014 21:37:37 +0100
 Subject: [PATCH 8/9] Implement XMvn repository factory method
diff --git a/0009-Use-hostname-command-as-fallback-way-of-getting-buil.patch b/0009-Use-hostname-command-as-fallback-way-of-getting-buil.patch
index 85489fd..94f1c70 100644
--- a/0009-Use-hostname-command-as-fallback-way-of-getting-buil.patch
+++ b/0009-Use-hostname-command-as-fallback-way-of-getting-buil.patch
@@ -1,4 +1,4 @@
-From fe3c02831660397dfa3b99daf6924cc7e03afec5 Mon Sep 17 00:00:00 2001
+From 88a6b1487441cc51b91391f7efbde5d82c257073 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Thu, 20 Nov 2014 11:04:23 +0100
 Subject: [PATCH 9/9] Use hostname command as fallback way of getting build
diff --git a/gradle.spec b/gradle.spec
index afd62dc..98228e1 100644
--- a/gradle.spec
+++ b/gradle.spec
@@ -1,6 +1,6 @@
 Name:           gradle
 Version:        2.2
-Release:        3%{?dist}
+Release:        4%{?dist}
 Summary:        Build automation tool
 # Some examples and integration tests are under GNU LGPL and Boost
 # Software License, but are not used to create binary package.
@@ -507,6 +507,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
 %files local -f .mfiles-local
 
 %changelog
+* Mon Nov 24 2014 Mikolaj Izdebski <mizdebsk at redhat.com> - 2.2-4
+- Add support for custom Wagon providers
+
 * Mon Nov 24 2014 Mikolaj Izdebski <mizdebsk at redhat.com> - 2.2-3
 - Restore support for userName in authentication info
 


More information about the scm-commits mailing list