2008年1月21日 星期一

URLClassLoader 的特性

如何動態載入不同的 jar ?

在 java ,可利用 URLClassLoader 動態載入jar。使用 URLClassLoader 時會動態載入指定路徑之 jar 或 classes。一般是以 http 居多,但也有指定檔案路徑,若是檔案路徑,需以這種格式 file:/d:\\t\\q.jar 放入。

特性

URLClassLoader cloader = new URLClassLoader (URL[] urls)
cloader.loadClass($classname);

這種用法只去 urls 找 $classname,若該 urls 中的 class 有用到目前的 classloader 中的 jar,還是會找不到的。舉個例子,若 $classname 有用到 com.stephen.ex.Car 這個 class,而這個 class 是放在目前執行這支程式的 classloader 中,這樣就會發生 NoClassDefError,解決方法是用下面這個 constructor:

URLClassLoader cloader = new URLClassLoader (URL[] urls, getClass().getClassLoader()) ;
cloader.loadClass($classname);

第二個參數是 parent classloader,將目前的 classLoader 當做該 URLClassLoader 的 parent 後就能順利找得到com.stephen.ex.Car 了。

沒有留言: