File 0003-Implement-XMvn-repository-factory-method.patch of Package gradle (Revision 5f8a1ad7f58fdb62fba4015b5fdd3c7f)
Currently displaying revision 5f8a1ad7f58fdb62fba4015b5fdd3c7f , Show latest
127
1
From 46e4a62a1e5e78b46a76a6d6669356de8dd51e06 Mon Sep 17 00:00:00 2001
2
From: Mikolaj Izdebski <mizdebsk@redhat.com>
3
Date: Sun, 9 Nov 2014 21:37:37 +0100
4
Subject: [PATCH 03/17] Implement XMvn repository factory method
5
6
---
7
.../artifacts/BaseRepositoryFactory.java | 2 +
8
.../dsl/DefaultRepositoryHandler.java | 5 ++
9
.../DefaultBaseRepositoryFactory.java | 62 +++++++++++++++++++
10
3 files changed, 69 insertions(+)
11
12
diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/BaseRepositoryFactory.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/BaseRepositoryFactory.java
13
index bfcbf4f618b..760782370e5 100644
14
--- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/BaseRepositoryFactory.java
15
+++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/BaseRepositoryFactory.java
16
17
IvyArtifactRepository createIvyRepository();
18
19
MavenArtifactRepository createMavenRepository();
20
+
21
+ ArtifactRepository createXMvnResolver();
22
}
23
diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/DefaultRepositoryHandler.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/DefaultRepositoryHandler.java
24
index 1640b68a114..d1770e97352 100644
25
--- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/DefaultRepositoryHandler.java
26
+++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/dsl/DefaultRepositoryHandler.java
27
28
public static final String FLAT_DIR_DEFAULT_NAME = "flatDir";
29
private static final String MAVEN_REPO_DEFAULT_NAME = "maven";
30
private static final String IVY_REPO_DEFAULT_NAME = "ivy";
31
+ private static final String XMVN_REPO_DEFAULT_NAME = "xmvn";
32
33
private final BaseRepositoryFactory repositoryFactory;
34
35
36
public IvyArtifactRepository ivy(Closure closure) {
37
return ivy(ConfigureUtil.configureUsing(closure));
38
}
39
+
40
+ public ArtifactRepository xmvn() {
41
+ return addRepository(repositoryFactory.createXMvnResolver(), XMVN_REPO_DEFAULT_NAME);
42
+ }
43
}
44
diff --git a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/DefaultBaseRepositoryFactory.java b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/DefaultBaseRepositoryFactory.java
45
index 0110370ff22..58c98f4e923 100644
46
--- a/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/DefaultBaseRepositoryFactory.java
47
+++ b/subprojects/dependency-management/src/main/java/org/gradle/api/internal/artifacts/repositories/DefaultBaseRepositoryFactory.java
48
49
import org.gradle.internal.resource.local.LocallyAvailableResourceFinder;
50
51
import java.io.File;
52
+import java.lang.reflect.Method;
53
+import java.net.MalformedURLException;
54
import java.net.URI;
55
+import java.net.URL;
56
+import java.net.URLClassLoader;
57
+import java.util.Arrays;
58
+import java.util.LinkedHashSet;
59
import java.util.Map;
60
+import java.util.Set;
61
62
public class DefaultBaseRepositoryFactory implements BaseRepositoryFactory {
63
private final LocalMavenRepositoryLocator localMavenRepositoryLocator;
64
65
return repository.getName() + '(' + url + ')';
66
}
67
}
68
+
69
+ public ArtifactRepository createXMvnResolver() {
70
+ // Check if XMvn connector is available and inform user if it's not.
71
+ // This is more user-friendly as it prevents cryptic stack traces.
72
+ if (!new File("/usr/share/java/xmvn/xmvn-connector-gradle.jar").exists())
73
+ throw new RuntimeException("Local mode for Gradle is not available because XMvn Gradle connector is not installed. "
74
+ + "To use local mode you need to install gradle-local package.");
75
+
76
+ // XMvn connector for Gradle is an external library and it is not
77
+ // included in default Gradle classpath. Before it can be accessed
78
+ // we need to add its implementation JARs to current class loader.
79
+ /*
80
+ try {
81
+ ClassLoader classLoader = getClass().getClassLoader();
82
+ Set<URL> newUrls = new LinkedHashSet<URL>();
83
+ newUrls.add(new File("/usr/share/java/xmvn/xmvn-api.jar").toURI().toURL());
84
+ newUrls.add(new File("/usr/share/java/xmvn/xmvn-launcher.jar").toURI().toURL());
85
+ newUrls.add(new File("/usr/share/java/xmvn/xmvn-connector-gradle.jar").toURI().toURL());
86
+ Method getterMethod = classLoader.getClass().getMethod("getURLs");
87
+ Object[] currentUrls = (Object[]) getterMethod.invoke(classLoader);
88
+ newUrls.removeAll(Arrays.asList(currentUrls));
89
+ Method adderMethod = classLoader.getClass().getMethod("addURLs", Iterable.class);
90
+ adderMethod.invoke(classLoader, newUrls);
91
+ } catch (ReflectiveOperationException e) {
92
+ throw new RuntimeException("Unable to inject XMvn JARs to Gradle class loader", e);
93
+ } catch (MalformedURLException e) {
94
+ // Should not happen
95
+ throw new RuntimeException(e);
96
+ }
97
+ */
98
+ Class xmvnClass;
99
+
100
+ try {
101
+ URL[] newUrls = new URL[] {
102
+ new File("/usr/share/java/xmvn/xmvn-api.jar").toURI().toURL(),
103
+ new File("/usr/share/java/xmvn/xmvn-core.jar").toURI().toURL(),
104
+ new File("/usr/share/java/xmvn/xmvn-connector-gradle.jar").toURI().toURL()
105
+ };
106
+ ClassLoader classLoader = new URLClassLoader(newUrls, getClass().getClassLoader());
107
+ String xmvnConnectorRole = "org.fedoraproject.xmvn.connector.gradle.GradleResolver";
108
+ xmvnClass = classLoader.loadClass(xmvnConnectorRole);
109
+ } catch (ClassNotFoundException e) {
110
+ throw new RuntimeException("Unable to inject XMvn JARs to Gradle class loader", e);
111
+ } catch (MalformedURLException e) {
112
+ // Should not happen
113
+ throw new RuntimeException(e);
114
+ }
115
+
116
+ try {
117
+ return (ArtifactRepository) xmvnClass.getConstructor(MetaDataParser.class, ImmutableModuleIdentifierFactory.class, FileResourceRepository.class)
118
+ .newInstance(pomParser, moduleIdentifierFactory, fileResourceRepository);
119
+ } catch (ReflectiveOperationException e) {
120
+ throw new RuntimeException("Failed to inject XMvn resolver", e);
121
+ }
122
+ }
123
}
124
--
125
2.17.2
126
127