1 package org.apache.maven.shared.runtime;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23 import java.net.URL;
24 import java.net.URLClassLoader;
25 import java.util.Enumeration;
26
27
28
29
30
31
32
33 public class DelegatingClassLoader extends URLClassLoader
34 {
35
36
37 private final boolean childDelegating;
38
39
40
41 public DelegatingClassLoader( URL[] urls )
42 {
43 super( urls );
44
45 childDelegating = false;
46 }
47
48 public DelegatingClassLoader( URL[] urls, ClassLoader parent )
49 {
50 this( urls, parent, false );
51 }
52
53 public DelegatingClassLoader( URL[] urls, ClassLoader parent, boolean childDelegating )
54 {
55 super( urls, parent );
56
57 this.childDelegating = childDelegating;
58 }
59
60
61
62
63
64
65 @Override
66 public Class<?> loadClass( String name ) throws ClassNotFoundException
67 {
68 Class<?> klass;
69
70 if ( childDelegating )
71 {
72 klass = findLoadedClass( name );
73
74 if ( klass == null )
75 {
76 try
77 {
78 klass = findClass( name );
79 }
80 catch ( ClassNotFoundException exception )
81 {
82 if ( getParent() != null )
83 {
84 klass = getParent().loadClass( name );
85 }
86 }
87 }
88 }
89 else
90 {
91 klass = super.loadClass( name );
92 }
93
94 return klass;
95 }
96
97
98
99
100 @Override
101 public URL getResource( String name )
102 {
103 URL url;
104
105 if ( childDelegating )
106 {
107 url = findResource( name );
108
109 if ( url == null && getParent() != null )
110 {
111 url = getParent().getResource( name );
112 }
113 }
114 else
115 {
116 url = super.getResource( name );
117 }
118
119 return url;
120 }
121
122
123
124
125 @Override
126 public Enumeration<URL> getResources( String name ) throws IOException
127 {
128 Enumeration<URL> urls;
129
130 if ( childDelegating )
131 {
132 urls = findResources( name );
133
134 if ( getParent() != null )
135 {
136 Enumeration<URL> parentURLs = getParent().getResources( name );
137
138 urls = new CompositeEnumeration<URL>( urls, parentURLs );
139 }
140 }
141 else
142 {
143 urls = super.getResources( name );
144 }
145
146 return urls;
147 }
148 }