[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