2012-01-09 25 views
5

Tôi có một chương trình nhỏ nơi người dùng có thể nhập một đoạn mã java "thực" trong vùng văn bản và sau đó thực thi mã để thực hiện một số kiểm tra hệ thống đơn giản. Chương trình này đã được tạo ra từ nhiều năm trước, và bây giờ tôi tò mò nếu có một số cách ưa thích mới để sử dụng nền tảng java để đạt được điều tương tự (bằng cách dụ người dùng nhập Groovy vào vùng văn bản, hoặc có thể hỗ trợ một số tập lệnh ngôn ngữ). Tôi đã tò mò khi đọc về java 7 có hỗ trợ cho các kịch bản được nhập động trong máy ảo của nó.Những cách ưa thích nào hiện có để hỗ trợ viết kịch bản trong java?

Trả lời

3

Bạn có thể sử dụng hỗ trợ JavaScript được tích hợp sẵn từ Java 6: Creating meta language with Java, xem thêm ScriptEngineFactory.

Khung Spring cũng có Dynamic language support.

Lưu ý rằng hỗ trợ ngôn ngữ động JVM 7 (qua invokedynamic) không liên quan ở đây. Nó chủ yếu nhắm vào các ngôn ngữ động được biên dịch sang bytecode JVM (như JRuby hoặc Groovy).

+1

Lưu ý rằng không phải tất cả các tàu Java 6 JVM có JavaScript - chỉ chạy vào một máy IBM không có. –

2

ScriptEngineManager đã được giới thiệu trong java 1.6. Đây là phiên bản của dự án Jakarta BSF cũ của Sun vẫn còn tồn tại. Cả hai đều hỗ trợ các ngôn ngữ kịch bản khác nhau bao gồm Groovy. Việc xây dựng trong ScriptEngineManager chỉ hỗ trợ JavaScript nhưng tôi tin rằng bạn có thể thêm trình thông dịch Groovy nữa.

1

Ngoài hỗ trợ tập lệnh được thêm vào trong các phiên bản Java mới hơn, bạn có tùy chọn sử dụng Bean Shell, một thứ thậm chí có thể được sử dụng với các phiên bản Java cũ hơn như 1.5. Sử dụng Bean Shell bạn chỉ có thể làm:

// assuming you have Java code in a string called script, you can do 
Object result = new bsh.Interpreter().eval(script); 
// now result object will have the result of your Java code contained in string script 

Bean Shell là hoàn toàn Java cơ kịch bản tương thích cho các kịch bản đánh giá và được sử dụng bởi Apache, Sun, Bea trong nhiều sản phẩm của họ.

Các vấn đề liên quan