java - loadClass throws NoClassDefFoundError caused by ClassNotFoundException -
using following code noclassdeffounderror caused classnotfoundexception:
file file = new file( "c:\\prototype.core.bl.xmodelval.xmodel-1.0.0.jar" ); url url = file.touri().tourl(); url[] urls = new url[] { url }; classloader cl = new urlclassloader( urls ); class cls = cl.loadclass("de.zeb.control.prototype.core.bl.xmodelval.xmodel.entity.entitynamelengthxmodelvalidationrule" ); the jar , class in jar available. following exception thrown cl.loadclass. full exception stack trace follows:
exception in thread "main" java.lang.noclassdeffounderror: de/zeb/control/prototype/core/bl/xmodelval/xmodelvalidationrule @ java.lang.classloader.defineclass1(native method) @ java.lang.classloader.defineclasscond(classloader.java:631) @ java.lang.classloader.defineclass(classloader.java:615) @ java.security.secureclassloader.defineclass(secureclassloader.java:141) @ java.net.urlclassloader.defineclass(urlclassloader.java:283) @ java.net.urlclassloader.access$000(urlclassloader.java:58) @ java.net.urlclassloader$1.run(urlclassloader.java:197) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:190) @ java.lang.classloader.loadclass(classloader.java:306) @ java.lang.classloader.loadclass(classloader.java:247) @ java.lang.classloader.defineclass1(native method) @ java.lang.classloader.defineclasscond(classloader.java:631) @ java.lang.classloader.defineclass(classloader.java:615) @ java.security.secureclassloader.defineclass(secureclassloader.java:141) @ java.net.urlclassloader.defineclass(urlclassloader.java:283) @ java.net.urlclassloader.access$000(urlclassloader.java:58) @ java.net.urlclassloader$1.run(urlclassloader.java:197) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:190) @ java.lang.classloader.loadclass(classloader.java:306) @ java.lang.classloader.loadclass(classloader.java:247) @ de.zeb.control.prototype.core.bl.xmodelval.jarwelfare.loader.xmodeljarloader.load(xmodeljarloader.java:32) @ de.zeb.control.prototype.core.bl.xmodelval.jarwelfare.supplier.runner.main(runner.java:29) caused by: java.lang.classnotfoundexception: de.zeb.control.prototype.core.bl.xmodelval.xmodelvalidationrule @ java.net.urlclassloader$1.run(urlclassloader.java:202) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:190) @ java.lang.classloader.loadclass(classloader.java:306) @ java.lang.classloader.loadclass(classloader.java:247) ... 24 more it seems strange me full class name of classnotfoundexception doesn't match name of cl.loadclass.
thank help.
you might need provide parent classloader, because otherwise classloader define won't able access classes present in application. e.g.:
classloader cl = new urlclassloader( urls , getclass().getclassloader());
Comments
Post a Comment