Я понимаю, что вы хотите:
- Компиляция исходного файла Java
- Загрузить скомпилированный код
- Использование результирующего класса в некоторых JavaScript
Пакет javax.tools предоставляет механизм компиляции кода, хотя, если вы не работаете в JDK, ToolProvider.getSystemJavaCompiler () вернет null
, и вы Придется полагаться на какой-то другой механизм компиляции (вызов внешнего компилятора; встраивание компилятора Eclipse и т. д.).
Java-байт-код (.class
двоичные файлы) может быть загружен во время выполнения через ClassLoader s.
Чтобы загруженные классы были видны вашему скриптовому движку, вам нужно предоставить их через ScriptEngineManager (ClassLoader) конструктор.
РЕДАКТИРОВАТЬ: на основе требований
public class HelloWorld {
public void say() {
System.out.println("Hello, World!");
}
}
Этот скрипт просто вызывает API отражения Java для загрузки и создания экземпляра класса HelloWorld.class
из каталога 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();
}
Есть более элегантные способы сделать это, я уверен.