java - NoClassDefFoundError ClassLoader -
im getting error on thie line loadedclass = classloader.loadclass("scripts.compass");
somehow file compiles fine when try load class wont work because says missing class com/deft/core/scripts/deftscript
compiling & instantiating:
file script = new file("./plugins/deft-core/scripts/compass.java"); diagnosticcollector<javafileobject> diagnostics = new diagnosticcollector<javafileobject>(); javacompiler compiler = toolprovider.getsystemjavacompiler(); standardjavafilemanager filemanager = compiler.getstandardfilemanager(diagnostics, null, null); list<string> optionlist = new arraylist<string>(); optionlist.addall(arrays.aslist("-classpath", system.getproperty("java.class.path") + ";./plugins/deft-core.jar")); iterable<? extends javafileobject> compilationunit = filemanager.getjavafileobjectsfromfiles(arrays.aslist(script)); javacompiler.compilationtask task = compiler.gettask(null, filemanager, diagnostics, optionlist, null, compilationunit); if (task.call()) { object obj = null; try { urlclassloader classloader = new urlclassloader(new url[]{new file("./plugins/deft-core/").touri().tourl()}); class<?> loadedclass; loadedclass = classloader.loadclass("scripts.compass"); obj = loadedclass.newinstance(); } catch (classnotfoundexception | instantiationexception | illegalaccessexception | malformedurlexception e) { e.printstacktrace(); } if (obj instanceof deftscript) { deftscript deftscript = (deftscript)obj; deftscript.onenable(); } } else { (diagnostic<? extends javafileobject> diagnostic : diagnostics.getdiagnostics()) { system.out.format("error on line %d in %s%n", diagnostic.getlinenumber(), diagnostic.getsource().touri()); } }
compass.java
package scripts; import com.deft.core.scripts.deftscript; public class compass extends deftscript { @override public void onenable() { } }
deftscript.java
package com.deft.core.scripts; public abstract class deftscript { public abstract void onenable(); }
error:
java.lang.noclassdeffounderror: com/deft/core/scripts/deftscript @ java.lang.classloader.defineclass1(native method) ~[?:1.8.0_45] @ java.lang.classloader.defineclass(unknown source) ~[?:1.8.0_45] @ java.security.secureclassloader.defineclass(unknown source) ~[?:1.8.0_45] @ java.net.urlclassloader.defineclass(unknown source) ~[?:1.8.0_45] @ java.net.urlclassloader.access$100(unknown source) ~[?:1.8.0_45] @ java.net.urlclassloader$1.run(unknown source) ~[?:1.8.0_45] @ java.net.urlclassloader$1.run(unknown source) ~[?:1.8.0_45] @ java.security.accesscontroller.doprivileged(native method) ~[?:1.8.0_45] @ java.net.urlclassloader.findclass(unknown source) ~[?:1.8.0_45] @ java.lang.classloader.loadclass(unknown source) ~[?:1.8.0_45] @ java.lang.classloader.loadclass(unknown source) ~[?:1.8.0_45] @ com.deft.core.main.deftcore.onenable(deftcore.java:79) ~[?:?]
you need load com.deft.core.scripts.deftscript
first before load scripts.compass
extending it. or can make sure drop parent class/jar in parent class loader path.
Comments
Post a Comment