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
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).
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.
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ọ.
- 1. Ngôn ngữ kịch bản có hỗ trợ sợi/coroutines?
- 2. cách ưa thích để viết các biểu thức boolean trong Java
- 3. Ngôn ngữ kịch bản ưa thích của bạn trong thế giới java (ngôn ngữ kịch bản trên JVM) và cách thức là gì?
- 4. Hỗ trợ Rijndael trong Java
- 5. Hỗ trợ Cobertura & Java 7
- 6. Cách ưa thích để sử dụng favicon?
- 7. Làm cách nào để phát hiện hỗ trợ `focusin`?
- 8. Phiên bản nào của SDK Android hỗ trợ mã hóa trong phiên bản Java nào?
- 9. Những ORM nào hỗ trợ các kiểu luồng công việc
- 10. Generics và chú thích java không được hỗ trợ trong phiên bản 1.3 (tích hợp travis)
- 11. hỗ trợ Copy-on-viết trong STL
- 12. Làm cách nào để phát hiện hỗ trợ rel = "noreferrer"?
- 13. Một số cách hay để đặt đường dẫn trong kịch bản Python được hỗ trợ Multi-OS
- 14. Mẹo viết mã các chương trình java trong kịch bản đa lõi
- 15. Spring MVC có hỗ trợ chú thích JSR 311 không?
- 16. Kịch bản nào có sẵn để sửa lỗi tạo kiểu và thiếu sót trong IE?
- 17. Kiểm tra hỗ trợ màu trong các kịch bản lệnh shell của Linux
- 18. Làm cách nào để biên dịch tệp .java với hỗ trợ cho các phiên bản Java cũ hơn?
- 19. Hộp thư ưa thích: Thêm chú thích và những thứ khác
- 20. Làm thế nào để viết kịch bản eshell?
- 21. Có cách nào để viết những ifs đẹp hơn?
- 22. Khi nào/làm cách nào để tôi viết kịch bản Apps trong Dart
- 23. Hỗ trợ cần điều khiển trong Java
- 24. Chú thích Java - Có thư viện trợ giúp nào để đọc/xử lý chú thích không?
- 25. Làm cách nào để bật hỗ trợ IPv6 trong LWP?
- 26. Viết kịch bản lệnh traceroute cơ bản trong C
- 27. Tìm kiếm ngôn ngữ kịch bản có thể nhúng cho C++ với hỗ trợ 64-bit và Cross Platform
- 28. Những cách khác nhau để thực hiện DAG trong java
- 29. API twitter ưa thích của API?
- 30. Java regex để hỗ trợ Unicode?
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ó. –