1 package twcsckernel.projectbase.utils; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.lang.reflect.Method; 6 import java.net.URL; 7 import java.net.URLClassLoader; 8 9 /*** 10 * Klasa służy do dynamicznego rozszerzania ścieżki classpath (ładowania 11 * klas do systemowego classloadera). 12 * @author VMD Group, internetowe grupy dyskusyjne 13 * 14 */ 15 public class ClassPathLoader { 16 private static final Class[] parameters = new Class[] { URL.class }; 17 18 /*** 19 * Dodanie pliku JAR/katalogu do sciezki classpath. 20 * @param filePath - ścieżka do pliku JAR/katalogu 21 * @throws IOException - błąd podczas wczytywania 22 */ 23 public static void addFile(String filePath) throws IOException { 24 addFile(new File(filePath)); 25 } 26 27 /*** 28 * Dodanie pliku JAR/katalogu do sciezki classpath. 29 * @param file - plik JAR/katalog 30 * @throws IOException - błąd podczas wczytywania 31 */ 32 public static void addFile(File file) throws IOException { 33 addURL(file.toURL()); 34 } 35 36 /*** 37 * Dodanie pliku JAR/katalogu do sciezki classpath. 38 * @param url - URL pliku JAR/katalogu 39 * @throws IOException - błąd podczas wczytywania 40 */ 41 public static void addURL(URL url) throws IOException { 42 URLClassLoader sysloader = (URLClassLoader) ClassLoader 43 .getSystemClassLoader(); 44 Class sysclass = URLClassLoader.class; 45 try { 46 Method method = sysclass.getDeclaredMethod("addURL", parameters); 47 method.setAccessible(true); 48 method.invoke(sysloader, new Object[] { url }); 49 } catch (Exception e) { 50 throw new IOException( 51 "Error, could not add URL to system classloader:" 52 + e.getMessage()); 53 } 54 } 55 }