entiendo que desea:
- compilar un archivo fuente de Java
- carga el código compilado
- Utilice la clase resultante de alguna JavaScript
El paquete javax.tools proporciona una mecanismo para compilar el código, aunque si no está ejecutando en un JDK, ToolProvider.getSystemJavaCompiler() devolverá null
y tendrá que confiar en som e otro mecanismo de compilación (invocando un compilador externo; incrustando el compilador de Eclipse; etc.).
Código de bytes de Java (.class
binarios) se puede cargar en tiempo de ejecución a través de ClassLoader s.
Para que las clases cargadas sean visibles para su motor de scripting, deberá proporcionarlas a través del constructor ScriptEngineManager(ClassLoader).
EDIT: en base a los requisitos
public class HelloWorld {
public void say() {
System.out.println("Hello, World!");
}
}
Este script simplemente invoca la API de reflexión de Java para cargar y crear instancias de una clase HelloWorld.class
desde el directorio C:\foo\bin
:
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();
}
Existen más maneras elegantes de hacer esto, estoy seguro.
¿Alguna razón por la que no puede usar la ruta de clases? –
¿Desea importar una clase Java en JavaScript que se ejecutará con Rhino? ¿O desea importar una clase de JavaScript en Java utilizando Rhino? –
Quiero importar una clase Java en un archivo JavaScript que se ejecutará usando Rhino :) esto es –