java - javax.tools.JavaCompiler Setting up classpath -
im trying write scripting system minecraft spigot plugin , im not quite sure on how give scripts information main jar file.
with current code compile script fine give me error on line "3" of compass.java file (the class declaration). see program doesnt know "com.deft.core.scripts.deftscript" , im not quite sure on how tell information.
i got compiling code this thread if relevant
compiling script:
diagnosticcollector<javafileobject> diagnostics = new diagnosticcollector<javafileobject>(); javacompiler compiler = toolprovider.getsystemjavacompiler(); standardjavafilemanager filemanager = compiler.getstandardfilemanager(diagnostics, null, null); list<string> optionlist = new arraylist<string>(); optionlist.add("-classpath"); optionlist.add(system.getproperty("java.class.path") + ";dist/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 e) { e.printstacktrace(); } catch (instantiationexception e) { e.printstacktrace(); } catch (illegalaccessexception e) { e.printstacktrace(); } catch (malformedurlexception e) { e.printstacktrace(); } if (obj instanceof deftscript) { deftscript deftscript = (deftscript)obj; deftscript.onenable(this); } } 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; public class compass extends com.deft.core.scripts.deftscript { @override public void onenabled() { } } deftscript.java
package com.deft.core.scripts; public abstract class deftscript { public abstract void onenable(); } with com.deft.core.scripts.deftscript being source im trying extend main jarfile.
im pretty sure problem lies somewhere within here:
list<string> optionlist = new arraylist<string>(); optionlist.add("-classpath"); optionlist.add(system.getproperty("java.class.path") + ";dist/deft-core.jar"); edit:
fixed problem setting class path. jar file in question location in location specified. switch out optionlist.add calls one
optionlist.addall(arrays.aslist("-classpath", system.getproperty("java.class.path") + ";./plugins/deft-core.jar")); all tho fixed initial question started causing new error. apon trying run newly compiled class file giving me 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) ~[?:?]
Comments
Post a Comment