I want to import a class that I already write in an external folder,
for example :
My class Example.java
that is located in c:\class\Example.java
to my script like using
var importedClass = new JavaImporter("c:\\class\\Example.java");
or
importClass("c:\\class\\Example.java");
this is in a script for ScriptEngine rhino
how can I do that ???
I understand that you want to:
The javax.tools package provides a mechanism for compiling code, though if you're not running in a JDK, ToolProvider.getSystemJavaCompiler() will return null
and you'll have to rely on some other compilation mechanism (invoking an external compiler; embedding the Eclipse compiler; etc.).
Java bytecode (.class
binaries) can be loaded at runtime via ClassLoaders.
In order for the loaded classes to be visible to your scripting engine, you'll need to provide them via the ScriptEngineManager(ClassLoader) constructor.
EDIT: based on the requirements
public class HelloWorld {
public void say() {
System.out.println("Hello, World!");
}
}
This script just invokes the Java reflection API to load and instantiate a class HelloWorld.class
from the C:\foo\bin
directory:
function classImport() {
var location = new java.net.URL('file:/C:/foo/bin/');
var urlArray = java.lang.reflect.Array.newInstance(java.net.URL, 1);
urlArray[0] = location;
var classLoader = new java.net.URLClassLoader(urlArray);
return classLoader.loadClass("HelloWorld");
}
var myClass = classImport();
for(var i=0; i<10; i++) {
myClass.getConstructor(null).newInstance(null).say();
}
There are more elegant ways of doing this, I'm sure.