Tôi hiểu rằng bạn muốn:
- Biên soạn một nguồn Java tập tin
- tải mã biên soạn
- Sử dụng lớp kết quả trong một số hoạt Javascript
Gói javax.tools cung cấp một cơ chế biên dịch mã, mặc dù nếu bạn không chạy trong JDK, ToolProvider.getSystemJavaCompiler() sẽ trả về null
và bạn sẽ phải dựa vào e cơ chế biên dịch khác (gọi trình biên dịch bên ngoài; nhúng trình biên dịch Eclipse; v.v.)
Java bytecode (.class
nhị phân) có thể được tải khi chạy qua ClassLoader s.
Để các lớp được tải hiển thị cho công cụ tạo tập lệnh của bạn, bạn sẽ cần cung cấp chúng thông qua hàm tạo ScriptEngineManager(ClassLoader).
EDIT: dựa trên các yêu cầu
public class HelloWorld {
public void say() {
System.out.println("Hello, World!");
}
}
Kịch bản này chỉ gọi sự phản chiếu Java API để tải và thuyết minh một lớp HelloWorld.class
từ C:\foo\bin
thư mục:
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();
}
Có nhiều những cách tao nhã để làm điều này, tôi chắc chắn.
Bất kỳ lý do nào bạn không thể sử dụng classpath? –
Bạn có muốn nhập một lớp Java trong JavaScript sẽ được chạy bằng cách sử dụng tê giác không? Hay bạn muốn nhập một lớp JavaScript trong Java bằng cách sử dụng tê giác? –
Tôi muốn nhập một lớp Java trong một tệp JavaScript sẽ chạy bằng Rhino :) đây là số –