package com.doc.jersey.loader;

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarLoader {
	private static final Class<?>[] parameters = new Class[]{URL.class};

	/**
	 * Try to load a jar as comme file
	 * @param path
	 * @throws IOException
	 * @throws ClassNotFoundException
	 */
	public static void load(String path) throws IOException {
		@SuppressWarnings("resource")
		JarFile file = new JarFile(path);
		Enumeration<JarEntry> e = file.entries();

		URL url = new URL("jar:file:" + path + "!/");
		
		URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
		Class<?> sysclass = URLClassLoader.class;

		try {
			Method method = sysclass.getDeclaredMethod("addURL", parameters);
			method.setAccessible(true);
			method.invoke(sysloader, new Object[]{url});
		} catch (Throwable t) {
			t.printStackTrace();
			throw new IOException("Error, could not add URL to system classloader");
		}
		
		while (e.hasMoreElements()) {
			JarEntry je = (JarEntry) e.nextElement();
			if(je.isDirectory() || !je.getName().endsWith(".class")){
				continue;
			}
			// -6 because of .class
			String className = je.getName().substring(0,je.getName().length()-6);
			className = className.replace('/', '.');
			try {
				sysloader.loadClass(className);
			}
			catch(ClassNotFoundException ex) {}
			catch(NoClassDefFoundError ez) {}
		}

	}
}

package com.doc.jersey.loader;

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.jar.JarFile;

public class JarLoader {
	private static final Class<?>[] parameters = new Class[]{URL.class};

	/**
	 * Try to load a jar as comme file
	 * @param path
	 * @throws IOException
	 */
	@SuppressWarnings("resource")
	public static void load(String path) throws IOException {
		/*@SuppressWarnings("resource")
		JarFile file = new JarFile(path);*/
		new JarFile(path);
		//Enumeration<JarEntry> e = file.entries();

		URL url = new URL("jar:file:" + path + "!/");
		
		URLClassLoader sysloader = (URLClassLoader) ClassLoader.getSystemClassLoader();
		Class<?> sysclass = URLClassLoader.class;

		try {
			Method method = sysclass.getDeclaredMethod("addURL", parameters);
			method.setAccessible(true);
			method.invoke(sysloader, new Object[]{url});
		} catch (Throwable t) {
			t.printStackTrace();
			throw new IOException("Error, could not add URL to system classloader");
		}
		
		/*while (e.hasMoreElements()) {
			JarEntry je = (JarEntry) e.nextElement();
			if(je.isDirectory() || !je.getName().endsWith(".class")){
				continue;
			}
			// -6 because of .class
			String className = je.getName().substring(0,je.getName().length()-6);
			className = className.replace('/', '.');
			try {
				sysloader.loadClass(className);
			}
			catch(ClassNotFoundException ex) {}
			catch(NoClassDefFoundError ez) {}
		}*/

	}
}

Make the JAR loader faster.