URLClassLoader 사용하기
프로그래밍/common 2010. 4. 20. 20:01서버 프로그램을 작성하다 보면 특정 디렉토리내의 jar 파일과 컴파일된 class 파일들을 읽어와야 하는 경우가 있다. 대표적으로 servlet container 들이 jar 파일과 class 파일들을 읽어오는 장소인 WEB-INF/classes 디렉토리와 WEB-INF/lib 디렉토리가 된다.
해당 디렉토리의 파일들을 읽어오기 위해서는 URLClassLoader 가 사용되며 아래 샘플 코드는
f:/workspace/Test/classes 디렉토리내의 class 파일들과 jar 파일을 읽어들이는 코드이다.
public static void main(String[] args) throws Exception{
String path = "f:/workspace/Test/classes";
// load class files in directory
ArrayList<URL> urls = new ArrayList<URL>();
URLStreamHandler streamHandler = null;
File classPath = new File( path);
urls.add( new URL(null, "file:" + classPath.getCanonicalPath() + File.separator, streamHandler));
// load jar files
File[] files = classPath.listFiles();
for( File file : files)
{
if( file.isFile() && file.getName().endsWith(".jar"))
{
urls.add( new URL(null, "file:" + file.getCanonicalPath(), streamHandler));
}
}
URLClassLoader loader = new URLClassLoader( (URL[])urls.toArray( new URL[urls.size()]));
String[] classNames = {"test.classloader.SampleClassLoader", "test.classloader.SamplePrototype"};
for( String className : classNames)
{
Class clazz = loader.loadClass( className);
Object obj = clazz.newInstance();
SamplePrototype sample = (SamplePrototype)obj;
sample.desc();
System.out.println();
}
package test.classloader; public class SamplePrototype { public void desc(){ System.out.println( this.getClass().getName()); System.out.println( this.getClass().getClassLoader()); } }
이클립스에서 테스트시 test.classloader.SampleClassLoader 클래스는 삭제한 후
f:/workspace/Test/classes/test/classloader 디렉토리로 이동시켰다.
아래는 실행 결과이다.
test.classloader.SampleClassLoader
java.net.URLClassLoader@757aef
test.classloader.SamplePrototype
sun.misc.Launcher$AppClassLoader@82ba41
'프로그래밍 > common' 카테고리의 다른 글
Log4j Summary (0) | 2010.04.20 |
---|