मैं हाल ही में इस मुद्दे में पड़ गए और यहाँ मैं, क्या मिला
पहले (यह बिलाव 7 ट्रंक से सब है), If left as blank, the "common" loader will be used as Catalina's "shared"/"server" loader.
यहाँ प्रासंगिक source है,
89 private void initClassLoaders() {
90 try {
91 commonLoader = createClassLoader("common", null);
92 if(commonLoader == null) {
93 // no config file, default to this loader - we might be in a 'single' env.
94 commonLoader=this.getClass().getClassLoader();
95 }
96 catalinaLoader = createClassLoader("server", commonLoader);
97 sharedLoader = createClassLoader("shared", commonLoader);
98 } catch (Throwable t) {
99 handleThrowable(t);
100 log.error("Class loader creation threw exception", t);
101 System.exit(1);
102 }
103 }
106 private ClassLoader createClassLoader(String name, ClassLoader parent)
107 throws Exception {
108
109 String value = CatalinaProperties.getProperty(name + ".loader");
110 if ((value == null) || (value.equals("")))
111 return parent;
इसलिए यदि कुछ भी परिभाषित नहीं किया गया है, तो वे common.loader प्रविष्टियों का उपयोग करने के लिए फ़ॉलबैक करते हैं।
आदेश है कि वे में लोड किए गए हैं करने के लिए के रूप में, यहाँ , source
229 Thread.currentThread().setContextClassLoader(catalinaLoader);
230
231 SecurityClassLoad.securityClassLoad(catalinaLoader);
232
233 // Load our startup class and call its process() method
234 if (log.isDebugEnabled())
235 log.debug("Loading startup class");
236 Class<?> startupClass =
237 catalinaLoader.loadClass
238 ("org.apache.catalina.startup.Catalina");
239 Object startupInstance = startupClass.newInstance();
240
241 // Set the shared extensions class loader
242 if (log.isDebugEnabled())
243 log.debug("Setting startup class properties");
244 String methodName = "setParentClassLoader";
245 Class<?> paramTypes[] = new Class[1];
246 paramTypes[0] = Class.forName("java.lang.ClassLoader");
247 Object paramValues[] = new Object[1];
248 paramValues[0] = sharedLoader;
249 Method method =
250 startupInstance.getClass().getMethod(methodName, paramTypes);
251 method.invoke(startupInstance, paramValues);
लाइन 229 सेट common.loader classloader से उन में लोड करने के लिए स्रोत है, तो लाइन 251 सेट shared.loader क्लासलोडर को कैटलिनास पैरेंट क्लास लोडर के रूप में सेट किया गया है।
यह भी देखें http://stackoverflow.com/questions/5474765/order-of-loading-jar-files-from-lib-directory – rogerdpack