1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.osgi.boot.internal.webapp;
20
21 import java.io.File;
22 import java.net.MalformedURLException;
23 import java.net.URL;
24 import java.net.URLClassLoader;
25 import java.util.ArrayList;
26 import java.util.HashMap;
27 import java.util.HashSet;
28 import java.util.List;
29 import java.util.Locale;
30 import java.util.Map;
31 import java.util.Set;
32
33 import org.eclipse.jetty.server.Server;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public class LibExtClassLoaderHelper
62 {
63
64
65
66
67
68
69 public interface IFilesInJettyHomeResourcesProcessor
70 {
71 void processFilesInResourcesFolder(File jettyHome, Map<String, File> filesInResourcesFolder);
72 }
73
74
75
76 public static final Set<IFilesInJettyHomeResourcesProcessor> registeredFilesInJettyHomeResourcesProcessors = new HashSet<IFilesInJettyHomeResourcesProcessor>();
77
78
79
80
81
82
83
84
85
86
87 public static ClassLoader createLibEtcClassLoader(File jettyHome, ClassLoader parentClassLoader) throws MalformedURLException
88 {
89 if (jettyHome == null) { return parentClassLoader; }
90 ArrayList<URL> urls = new ArrayList<URL>();
91 File jettyResources = new File(jettyHome, "resources");
92 if (jettyResources.exists())
93 {
94
95 Map<String, File> jettyResFiles = new HashMap<String, File>();
96 for (File f : jettyResources.listFiles())
97 {
98 jettyResFiles.put(f.getName(), f);
99 if (f.getName().toLowerCase(Locale.ENGLISH).startsWith("readme"))
100 {
101 continue;
102 }
103 else
104 {
105 if (urls.isEmpty())
106 {
107 urls.add(jettyResources.toURI().toURL());
108 }
109 }
110 }
111 processFilesInResourcesFolder(jettyHome, jettyResFiles);
112 }
113 File libExt = new File(jettyHome, "lib/ext");
114 if (libExt.exists())
115 {
116 for (File f : libExt.listFiles())
117 {
118 if (f.getName().endsWith(".jar"))
119 {
120
121 URL url = f.toURI().toURL();
122 if (f.isFile())
123 {
124 url = new URL("jar:" + url.toString() + "!/");
125 }
126 urls.add(url);
127 }
128 }
129 }
130
131 return new URLClassLoader(urls.toArray(new URL[urls.size()]), parentClassLoader);
132 }
133
134
135
136
137
138
139
140
141
142
143
144 public static ClassLoader createLibExtClassLoader(List<File> jarsContainerOrJars, List<URL> otherJarsOrFolder, ClassLoader parentClassLoader)
145 throws MalformedURLException
146 {
147 if (jarsContainerOrJars == null && otherJarsOrFolder == null) { return parentClassLoader; }
148 List<URL> urls = new ArrayList<URL>();
149 if (otherJarsOrFolder != null)
150 {
151 urls.addAll(otherJarsOrFolder);
152 }
153 if (jarsContainerOrJars != null)
154 {
155 for (File libExt : jarsContainerOrJars)
156 {
157 if (libExt.isDirectory())
158 {
159 for (File f : libExt.listFiles())
160 {
161 if (f.getName().endsWith(".jar"))
162 {
163
164 URL url = f.toURI().toURL();
165 if (f.isFile())
166 {
167
168 url = new URL("jar:" + url.toString() + "!/");
169 }
170 urls.add(url);
171 }
172 }
173 }
174 }
175 }
176 return new URLClassLoader(urls.toArray(new URL[urls.size()]), parentClassLoader);
177 }
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194 protected static void processFilesInResourcesFolder(File jettyHome, Map<String, File> childrenFiles)
195 {
196 for (IFilesInJettyHomeResourcesProcessor processor : registeredFilesInJettyHomeResourcesProcessors)
197 {
198 processor.processFilesInResourcesFolder(jettyHome, childrenFiles);
199 }
200 }
201
202 }