blob: 0e920c6a342563378de594b9591b4810d1bc9143 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* 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. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*
* StandaloneWebappClassLoader.java
* Created on October 20, 2006, 11:11 PM
*/
package org.apache.roller.weblogger.util;
import java.io.File;
import java.io.FilenameFilter;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
/**
* ClassLoader to enable running webapp classes outside of webapp.
* You provide webappDir and jarsDir paths and the classloader will include
* webappDir/WEB-INF/classes, webappDir/WEB-INF/lib/*jar and jarsDir/*.jar.
*/
public class StandaloneWebappClassLoader extends URLClassLoader {
public static String FS = File.separator;
/** Use calling class's parent classloader */
public StandaloneWebappClassLoader(String webappDir, String jarsDir) throws Exception {
super(buildURLsArray(webappDir, jarsDir));
}
/** Use a specific parent classloader, or null for no parent */
public StandaloneWebappClassLoader(String webappDir, String jarsDir, ClassLoader cl) throws Exception {
super(buildURLsArray(webappDir, jarsDir), cl);
}
private static URL[] buildURLsArray(String webappDir, String jarsDir) throws Exception {
// Create collection of URLs needed for classloader
List urlList = new ArrayList();
// Add WEB-INF/lib jars
String libPath = webappDir + FS + "WEB-INF" + FS + "lib";
addURLs(libPath, urlList);
// Added WEB-INF/classes
String classesPath = webappDir + FS + "WEB-INF" + FS + "classes" + FS;
urlList.add(new URL("file://" + classesPath));
// Add additional jars
addURLs(jarsDir, urlList);
return (URL[])urlList.toArray(new URL[urlList.size()]);
}
private static void addURLs(String dirPath, List urlList) throws Exception {
File libDir = new File(dirPath);
String[] libJarNames = libDir.list(new FilenameFilter() {
public boolean accept(File dir, String pathname) {
if (pathname.endsWith(".jar")) {
return true;
}
return false;
}
});
for (int i=0; i<libJarNames.length; i++) {
String url = "file://" + dirPath + FS + libJarNames[i];
urlList.add(new URL(url));
}
}
}