Tuesday, January 12, 2010

How to Write a Custom Class Loader to Load Classes from a Jar

A custom class loader is needed when the developer needs to load classes from some custom repositories, to implement hot deployment features and to allow unloading of classes.

According to Java2 class loading system, a custom class loader should subclass java.lang.ClassLoader and overrride findClass() method which is responsible for loading the class bytes and returning a defined class.

Following code is a custom class loader which loads classes from jars, inside the directory called "jar".

public class JarClassLoader extends ClassLoader {
    private String jarFile = "jar/test.jar"; //Path to the jar file
    private Hashtable classes = new Hashtable(); //used to cache already defined classes

    public JarClassLoader() {
        super(JarClassLoader.class.getClassLoader()); //calls the parent class loader's constructor

    public Class loadClass(String className) throws ClassNotFoundException {
        return findClass(className);

    public Class findClass(String className) {
        byte classByte[];
        Class result = null;

        result = (Class) classes.get(className); //checks in cached classes
        if (result != null) {
            return result;

        try {
            return findSystemClass(className);
        } catch (Exception e) {

        try {
            JarFile jar = new JarFile(jarFile);
            JarEntry entry = jar.getJarEntry(className + ".class");
            InputStream is = jar.getInputStream(entry);
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
            int nextValue = is.read();
            while (-1 != nextValue) {
                nextValue = is.read();

            classByte = byteStream.toByteArray();
            result = defineClass(className, classByte, 0, classByte.length, null);
            classes.put(className, result);
            return result;
        } catch (Exception e) {
            return null;


This code can be improved to
* Load classes from any jar inside the directory
* Dynamically pick up classes if the jar is updated (by keeping a modified time field)


Asiri Rathnayake said...

Hi Kalani, make sure your implementation doesn't break resource loading. I think I came across this issue when I wrote a JarClassLoader for one of my projects. As I remember, if you have stuff like Class.getResource(String) which tries to load jar - local resource, they won't work out of the box with this JarClassLoader.

kalani Ruwanpathirana said...

Hi Asiri, Thanks for pointing out. Yea this class loader doesn't override ClassLoader's findResource() method. In my case I was just testing to achieve dynamism only in class loading. I guess this kinda thing will resolve that.

public URL findResource(String name) {
try {
File file = new File(jarFile);
String url = file.toURL().toString();
return new URL("jar:"+url+"!/"+name);
} catch (Exception e) {
return null;


Just a quick test. There may be more prof ways.

janandith uditha jayawardena said...

Hi Kalani, Nice post. Simple and sweet.

kalani Ruwanpathirana said...

Thank you Janandith :)

Iñaki López said...


I'm developing a library that tries to imitate the Java Web Start functionality, and for doing that I am creating a custom class loader.

I used your code as starting point and now my class loader works perfect.

Thanks a lot!

Greetings from Spain.

kalani Ruwanpathirana said...

Nice to hear that. Thanks.

Chhote Lal Prasad Gupta said...

Hi Kalani,

It is really a good article for a custom class loader. Your expanation is very good and very precise.Thanks for posting a good article on net.


Manoj said...

Hi Kalani,

A very good piece of work. The sample code works great. I guess you should also cover about your finding on the classloader aspect of Java.

Keep up the good work and keep it posting too :-)

kalani Ruwanpathirana said...

Thanks Manoj and Cchote...sure, I'll be posting:)

Unknown said...

Helllo Kalani,

Doesn't URLClassLoader already does this with improvments you have suggested...

Android my life said...

Nice tutorial on the image splitting and concatenation.

Unknown said...

the site provides the solutions specifically targeted towards business directories. and conjointly provide free business listings and free business advertising to all or any small business homeowners.
Custom Directory

sofwarewiki said...

nice post, just stumble across your blog from stackoverflow ref..

Sumit said...

kalani ji,,,i am in btech and my project is how to design class loader in java please help me .....my email id kumarsumit912@gmail.com...
if their is any code related to this please send me and also how to run.

Unknown said...

Hi kalani,
The post is really very good.
I have very less knowledge on class loader, so please correct me if am wrong. I understand the reason why you have overridden findClass(As your intend is to load the class from jar). But why is that you have overridden loadClass in your classloader?
Isn't the base class(ClassLoader) does the similar implementation? if we use the default constructor to create classloader the parent loader would be systemclassloader. So you reduce rewriting this logic in your implementation of findClass.

PS :
I am not commenting on your code, it's just that I am trying to understand better. Please do provide your thoughts :)

wimal_perera said...

Hi Kalani,

Its a great post to see how a class loader works internally, especially how the internals of a jar file can be read and how defineClass() method could be used.

But isn't it possible to achieve the same thing in your code by doing something like;

java.io.File jarFile = new java.io.File("path_to_your_jar_file");
java.net.URL fileURL = jarFile.toURL();
URLClassLoader clsLoader = new URLClassLoader(new URL[] {fileURL});

Or am I missing something important here?

Dilbert said...

This post helped me at need of the hour.

Thanks a ton

anne said...

Custom writings should cover the entire coursework activities and this should be stated by the professor before he or she delivers the custom writing to the students for undertakings this site will help you so.

Unknown said...

http://www.bestcustomessay.org/essays will not provide your personal details to other people at any circumstance.

manoj said...

Hi Kalani,
How to take care of laoding multiple jars by the custom classaloder

Pass it as URL[] ?


Unknown said...

Good instruction, this is really a big help to all computer geeks out there. Hope you can write more mightystudents essay like this one.

hemcoined said...

I used your code as starting point and now my class loader works perfect.

Unknown said...

First of all I would like to thank for this nice articles. It really helped me a lot writing a custom loader.

Still I have some questions on this. With out our custom loader can't we load the classes from out custom jar?

Little confused on this.

Can you please share your answers on my mail id pretheshkumarbhalotia@gmail.com

Thanaks a ton Kalani.

Anonymous said...

Hi Kalani,

I get the following error while using this code

at java.util.zip.ZipFile.getInputStream(Unknown Source)
at java.util.jar.JarFile.getInputStream(Unknown Source)

Can you help?

Unknown said...

Hi Kalani,
You don't want parent classloader to load class.Why did you invoke super method?

Unknown said...

It is good to note that only a few of the programmers are usually prepared to cope with Java programming. This is due to the complexity which is attached to the implementation and development of Java programs. Through such forums, such complexity is usually minimized and it gives a developer an easy time. You can request for computer science projects Literature Review Paraphrasing Assistance online.

Kale Co Jakim said...

Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Java developer learn from Java Training in Chennai. or learn thru Java Online Training in India . Nowadays Java has tons of job opportunities on various vertical industry.

siva said...

Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me. I am a regular follower of your blog.
Really very informative post you shared here. Kindly keep blogging.
Java training in Btm layout
Java training in Rajaji nagar
Java training in Kalyan nagar
Java training in Kalyan nagar
Java training in Jaya nagar

shiny said...

Good information to be known and to be discussed.Good to learn something new.and its nice to see all discussing about the rectifications.good share of knowledge.
lenovo service centre chennai
lenovo service center
lenovo mobile service center near me
lenovo mobile service centre in chennai

Training for IT and Software Courses said...

Its really helpful for the users of this site. I am also searching about these type of sites now a days. So your site really helps me for searching the new and great stuff.

sap s4 hana training in bangalore

sap simplefinance training in bangalore

sap training in bangalore

sap abap training in bangalore

sap basis training in bangalore

sap bi training in bangalore

sap dynpro training in bangalore

sap fico training in bangalore

Training for IT and Software Courses said...

This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points. To appreciate this I like to share some useful information.

sap crm training in bangalore

sap ehs training in bangalore

sap bw training in bangalore

sap hana training in bangalore

sap hr training in bangalore

sap mm training in bangalore

sap pm training in bangalore

sap pp training in bangalore

Training for IT and Software Courses said...

It is very good and useful for students and developer.Learned a lot of new things from your post Good creation,thanks for give a good information.

sap ps training in bangalore

sap qm training in bangalore

sap scm training in bangalore

sap sd training in bangalore

sap srm training in bangalore

sap hybris training in bangalore

sap wm training in bangalore

sap ewm training in bangalore

Training for IT and Software Courses said...

I have to voice my passion for your kindness giving support to those people that should have guidance on this important matter.

sap solution manager training in bangalore

sap security training in bangalore

sap grc security training in bangalore

sap ui5 training in bangalore

sap bods training in bangalore

sap apo training in bangalore

sap gts training in bangalore

sap hana admin training in bangalore

Training for IT and Software Courses said...

Excellent post for the people who really need information for this technology.

sap idm training in bangalore

sap mdm training in bangalore

sap successfactor training in bangalore

sap fiori training in bangalore

sap bpc training in bangalore

sap testing training in bangalore

sap testing training in bangalore

sap simple logistics training in bangalore

شركة المثالي سوبر said...

شركة عزل أسطح و خزانات بالإحساء

شركة تنظيف بالقطيف

شركة تنظيف بالخبر

شركة تنظيف بالإحساء

Gerard said...

Nice post! Thanks for sharing this information. Looking for help with your chapter 4 data analysis and findings? Get online qualitative and quantitative data analysis services from the leading Research Projects Writing Company at an affordable cost. Our experts are available 24/7.

Term Paper Writing Services said...

Philosophy coursework writing service seekers have been on the rise lately since most learners need Philosophy Essay Writing Services, philosophy assignment writing services and philosophy research paper writing services.

saketh321 said...

Hi to everybody, here everyone is sharing such knowledge, so it’s fastidious to see this site, and I used to visit this blog daily. ExcelR Data Science Course In Pune

Best Training Institute said...

Hi, your article was of great help. I loved the way you shared the information, thanks.

Sap EHS training in bangalore

Deekshitha said...

Informative blog
Data Science Course in Pune

Related Posts with Thumbnails