Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Class.forName() from distant directory

I am currently loading Java classes using Class.forName() to load it.

clazz = Class.forName("interfaces.MyClass");

But now I want to load classes from different directory, I have tried to set classpath by

clazz = Class.forName("-cp \"C:/dir\" distantinterfaces.DistantClass");

With no success and ClassNotFoundException. Full path to distant class is:

C:/dir/distantinterfaces/DistantClass.class
like image 965
kajacx Avatar asked May 02 '13 10:05

kajacx


2 Answers

Use an URLClassLoader for this. The code might be something along the lines of:

File f = new File("C:/dir");
URL[] cp = {f.toURI().toURL()};
URLClassLoader urlcl = new URLClassLoader(cp);
Class clazz = urlcl.loadClass("distantinterfaces.DistantClass");
like image 127
Andrew Thompson Avatar answered Nov 13 '22 05:11

Andrew Thompson


Either the directory is in the classpath, and you can use Class.forName() (which only accepts fuly qualified name classes, and not -cp command line options), or it's not in the classpath and you should then use a custom class loader.

You're not saying what you really want to do (why are you loading classes dynamically), but your best bet is to have the directory in the classpath.

like image 38
JB Nizet Avatar answered Nov 13 '22 07:11

JB Nizet