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