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
: