📄 treeclassloaders.java
字号:
package org.codehaus.classloader;
import java.io.File;
import java.io.FileFilter;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
/**
* The facade class for creating tree class loaders.
* <p>
* @author Ben Yu
* Aug 2, 2006 11:06:25 PM
*/
public class TreeClassLoaders {
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param parent the parent class loader.
* @param urls the urls that will be searched first.
* @param dir the directory.
* @param filter the filter that filters files with classes.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(ClassLoader parent, File dir, FileFilter filter){
if(dir.isDirectory()){
return new TreeClassLoader(parent,
new FileTreeClassLoaderManager(parent, Util.toURLs(dir), dir, filter));
}
else{
throw new IllegalArgumentException("file has to be a directory.");
}
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param parent the parent class loader.
* @param dir the directory.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(ClassLoader parent, File dir){
return makeClassLoader(parent, dir, MayBeClassSource.defaultInstance());
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param dir the directory.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(File dir){
return makeClassLoader(ClassLoader.getSystemClassLoader(), dir);
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param parent the parent class loader.
* @param urls the urls to search for classes.
* @param filter the filter that filters files with classes.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(ClassLoader parent, URL[] urls, FileFilter filter){
if(urls==null || urls.length==0) return parent;
final ArrayList urllist = new ArrayList();
final ArrayList filelist = new ArrayList();
identifyFiles(urls, urllist, filelist);
final URL[] urlarray = new URL[urllist.size()];
urllist.toArray(urlarray);
final File[] filearray = new File[filelist.size()];
filelist.toArray(filearray);
return makeClassLoader(parent, urlarray, filearray, filter);
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param parent the parent class loader.
* @param urls the urls to search for classes at the top level. These urls cannot be hot-swapped.
* @param files that can be hot-swapped and enforce hierarchical rule.
* @param filter the filter that filters files with classes.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(ClassLoader parent, final URL[] urls, final File[] trees, FileFilter filter) {
if(trees==null || trees.length==0){
return new URLClassLoader(urls, parent);
}
return new TreeClassLoader(parent,
new FileForestClassLoaderManager(parent, urls,
trees, filter));
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param parent the parent class loader.
* @param urls the directories/files/urls.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(ClassLoader parent, URL[] urls){
return makeClassLoader(parent, urls, MayBeClassSource.defaultInstance());
}
/**
* Create a tree ClassLoader object that enforces rules where classes in the same branch takes
* precedence over those in siblings.
* @param urls the directories/files/urls.
* @return the class loader object.
*/
public static ClassLoader makeClassLoader(URL[] urls){
return makeClassLoader(ClassLoader.getSystemClassLoader(), urls);
}
private static void identifyFiles(URL[] urls, final ArrayList urllist, final ArrayList filelist) {
final FileFilter pred = MayBeClassSource.defaultInstance();
for(int i=0; i<urls.length; i++){
final URL url = urls[i];
if(Util.isFile(url)){
final File file = Util.toFile(url);
if(pred.accept(file))
filelist.add(file);
if(file.isDirectory()){
//we allow naked class files in directories. So add it to url list.
urllist.add(url);
}
}
else{
urllist.add(url);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -