2009-06-19 63 views
8

Làm cách nào để sử dụng hiệu quả "Công cụ tạo tập lệnh" bên trong Java?Công cụ tạo mã Java được sử dụng ở đâu?

Tất cả các trường hợp sử dụng phù hợp để sử dụng công cụ tạo tập lệnh là gì?

Có dự án nguồn mở nào đang sử dụng "Công cụ tạo tập lệnh" không?

Một điều cần lưu ý là hỗ trợ "Đóng gói, lập trình chức năng" có thể thực hiện được, nhưng nó sử dụng kỹ thuật nhiều hơn "Yêu cầu ứng dụng".

Plugin có thể định cấu hình là OK. Nhưng vẫn còn rất nhiều mẫu (khách truy cập, trang trí) trên cấp độ cao có thể làm tương tự.

Tôi không biết yêu cầu tốt ... mức độ hiệu quả của nó có thể được sử dụng trong các mẫu Java EE ... nơi nó có thể bổ sung cho các mẫu hiện có.

Hơn nữa, tôi muốn xem thêm câu trả lời với một số lần sử dụng doanh nghiệp. Có thể giống như việc tìm kiếm chiết khấu phức tạp cho một sản phẩm trong quá trình bán dựa trên tư cách thành viên hoặc địa điểm. Tìm thứ hạng cho một thuật toán phức tạp. Đặc biệt là tại sao không phải Java trong một số trường hợp? (hoặc C# trong thế giới .NET)

Trả lời

12

Trong Java 6, hỗ trợ động cơ kịch bản được xây dựng trong. Ví dụ,

// Create a script engine manager 
    ScriptEngineManager factory = new ScriptEngineManager(); 

    // Create a JavaScript engine 
    ScriptEngine engine = factory.getEngineByName("JavaScript"); 

    // Evaluate JavaScript code from String 
    engine.eval("print('Hello, World')"); 

Tại sao bạn sẽ sử dụng một? Một số lý do:

  1. bạn có một thư viện trong một ngôn ngữ kịch bản mà bạn muốn sử dụng trong Java (ví dụ như một thư viện Python mà bạn có thể chạy qua Jython)
  2. Bạn muốn cung cấp một cơ chế lập trình cấu hình cho khách hàng, sao cho họ có thể cung cấp đoạn mã ngắn. Ví dụ: tôi đã thực hiện điều này trong quá khứ cho phép khách hàng viết bộ lọc bằng JavaScript (ví dụ: x < 2 và y> 5 và z> 10?).
  3. Bạn có thể triển khai logic phức tạp hơn trong các công cụ như Ant bằng cách viết kịch bản trực tiếp trong tệp cấu hình
  4. Bạn có thể triển khai các giải pháp trong ngôn ngữ phù hợp hơn với miền đó (ví dụ: sử dụng lambdas qua Clojure), nhưng duy trì sự phụ thuộc của bạn trên JVM .

Triển khai bao gồm Rhino (triển khai Java Javascript), Jython (Java Python) và nhiều tính năng khác.

+2

Lưu ý: Không có đảm bảo rằng bất kỳ công cụ nào sẽ được đi kèm với JVM; vì vậy bạn cần phải mang theo của riêng bạn như là một phần của ứng dụng của bạn. –

1

"Tất cả trường hợp sử dụng phù hợp để sử dụng công cụ tạo tập lệnh là gì?" Đây là một câu hỏi khá mơ hồ. Có nhiều trường hợp sử dụng. Đây chỉ là một vài tôi có thể nghĩ đến ngay lập tức:

  1. Plugin hệ thống/extension
  2. IDE
  3. Lập trình hướng dẫn với trình diễn live

Tôi giả sử bạn đang đề cập đến JSR 223 đặc biệt . Nếu vậy, bạn nên xem xét scripting.dev.java.net

1

Tôi chưa sử dụng JavaScript cụ thể, nhưng tôi đã tích hợp Groovy vào khung ứng dụng của tôi để cung cấp một ngôn ngữ cụ thể cho miền (DSL). Tôi đã tạo ra các hàm và các lớp móc vào ứng dụng của tôi.

Người dùng được phép viết các hoạt động phổ biến trong ứng dụng (macro) cũng như triển khai xử lý nhẹ để tránh giải pháp mã-trình biên dịch-triển khai nhiều hơn. Nếu người dùng có ý tưởng về một plugin cho khung xử lý của tôi, họ có thể tạo mẫu qua Groovy trong thời gian thực và chuyển về Java (thậm chí có thể là bản địa) khi có thời gian (hoặc khi cần tốc độ). Xin lưu ý rằng việc tạo kịch bản thường là các đơn đặt hàng có cường độ chậm hơn Java/C#/C/C++

9

Dưới đây là một số trường hợp tôi đã sử dụng nó.

1) Java muốn gọi ngôn ngữ kịch bản, ví dụ 1. Tôi có một ứng dụng Java chấp nhận nhận xét của người dùng thông qua tiện ích JavaScript của WMD. Người dùng nhập nhận xét ở định dạng Markdown và thư viện JavaScript có tên Showdown chuyển đổi nó thành HTML ở hai nơi: (1) trên máy khách, để hỗ trợ xem trước thời gian thực; và (2) trên máy chủ, vì tôi muốn khách hàng gửi Markdown thuần túy đến máy chủ và lưu trữ ở đó để người dùng có thể chỉnh sửa Markdown sau (thay vì phải bằng cách nào đó đảo ngược HTML thành Markdown). Khi lưu trữ nhận xét trên máy chủ, tôi cũng chạy chuyển đổi ở đó và tôi lưu trữ HTML cùng với Đánh dấu để tôi không phải chuyển đổi động Markdown khi hiển thị danh sách nhận xét. Để đảm bảo rằng HTML trên máy chủ khớp với HTML trên máy khách, tôi muốn sử dụng cùng một thư viện Showdown. Vì vậy, tôi chạy Showdown phía máy chủ bên trong công cụ JavaScript Rhino.

2) Java muốn gọi ngôn ngữ kịch bản, ví dụ 2. Tôi đang làm việc trên một ứng dụng tự động hóa triển khai có liên quan đến các bên liên quan trên vai trò khác nhau, chẳng hạn như các nhà phát triển, quản trị hệ thống và phát hành các kỹ sư. Ứng dụng tổng thể (luồng công việc và giao diện người dùng) là một ứng dụng Java, nhưng tại các vị trí khác nhau, nó gọi các kịch bản khác nhau (ví dụ như Ruby, bash), chẳng hạn như đẩy gói, xác minh cấu hình, cài đặt gói, thử nghiệm khói, v.v. tốt hơn/tiết kiệm hơn khi thể hiện việc tạo thư mục, sao chép, di chuyển, wgetting, vv và một phần vì những người sở hữu phần cụ thể của chiếc bánh biết cách làm việc với các ngôn ngữ kịch bản chứ không phải Java. Vì vậy, chúng tôi gọi các kịch bản ở đây bằng cách sử dụng API Scripting của Java. Phải thừa nhận rằng trong trường hợp này chúng ta chỉ có thể thực thi các kịch bản bên ngoài Java nhưng xem # 3 bên dưới.

3) Ngôn ngữ kịch bản muốn gọi Java. Trong ứng dụng triển khai nói trên, chúng tôi có nhật ký triển khai dựa trên web và chúng tôi nỗ lực làm cho các nhật ký triển khai trở nên dễ đọc và dễ hiểu nhất có thể, vì một nhà phát triển/SQA/kỹ sư phát hành lớn sử dụng nhật ký, và không phải ai cũng hiểu tất cả các chi tiết về những gì chính xác xảy ra với triển khai. In ấn và mã hóa màu sắc là một phần của cách tiếp cận này. Chúng tôi đã triển khai API đăng nhập triển khai khá ấn tượng trong Java nhưng chúng tôi muốn có thể có các tập lệnh gọi đó. Vì vậy, ví dụ khi kịch bản lệnh Ruby đẩy chạy, chúng tôi muốn nó ghi lại tiến trình của nó vào máy in đẹp. Chạy Ruby bên trong JRuby cho phép kịch bản lệnh Ruby xem API Java khá máy in.

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