Thật! Tại sao không sử dụng một ngôn ngữ mạnh mẽ và biểu cảm cho một vấn đề phức tạp hơn mọi người thường nghĩ (ban đầu)? Đặc biệt là khi những người phải đối mặt với vấn đề đã có năng lực với ngôn ngữ như vậy. (Tòa nhà là vấn đề của lập trình viên và được các lập trình viên giải quyết tốt nhất.)
Tôi cũng đã tự hỏi mình câu hỏi này nhiều năm trước và quyết định rằng Java là một ngôn ngữ tốt để xác định các bản dựng, đặc biệt là cho các dự án Java. Và, kết quả là, tôi bắt đầu làm một cái gì đó về nó.
TUYÊN BỐ TỪ CHỐI : Trong câu trả lời này, tôi đang quảng bá cho iwant , một hệ thống xây dựng mà tôi đang phát triển. Nhưng vì dù sao đây cũng là một cuộc thảo luận có ý kiến, tôi chắc chắn rằng nó ổn.
Tôi sẽ không giải thích chi tiết về lợi ích của Java (sức mạnh và tính biểu cảm) hoặc cụ thể. Nếu bạn quan tâm, bạn có thể đọc thêm trên trang iwant .
Thay vào đó, tôi sẽ xem xét tại sao Java (và các GPL khác) lại dễ dàng bị loại bỏ như vậy là không phù hợp để xây dựng. Nhiều câu trả lời và bình luận ở đây là những ví dụ tốt về suy nghĩ như vậy. Chúng ta hãy xem xét một số đối số điển hình:
"Java là bắt buộc, nhưng các bản dựng được xác định tốt nhất theo cách khai báo" , họ có thể nói.
Thật. Nhưng khi sử dụng ngôn ngữ làm ngôn ngữ kim loại cho DSL bên trong , điều thực sự được tính là cú pháp của nó . Ngay cả một ngôn ngữ bắt buộc như Java cũng có thể bị lừa để khai báo. Nếu nó trông và cảm thấy khai báo, đó là (cho mục đích thực tế) khai báo. Ví dụ:
JacocoTargetsOfJavaModules.with()
.jacocoWithDeps(jacoco(), modules.asmAll.mainArtifact())
.antJars(TestedIwantDependencies.antJar(),
TestedIwantDependencies.antLauncherJar())
.modules(interestingModules).end().jacocoReport(name)
Đây là một ví dụ thực tế từ dự án demo của iwant .
Trong thực tế, so sánh điều này với một số hệ thống xây dựng được cho là khai báo cho phép người dùng của họ tiếp xúc với các động từ bắt buộc như "thử nghiệm" hoặc "biên dịch". Tuyên bố trên chỉ chứa danh từ, không có động từ. Biên dịch và kiểm tra là các tác vụ được iwant xử lý ngầm để cấp cho người dùng các danh từ mà anh ấy / cô ấy muốn. Đó không phải là ngôn ngữ. Đó là cách bạn sử dụng nó.
"Java dài dòng"
Vâng, rất nhiều mã Java ngoài kia là dài dòng. Nhưng một lần nữa, đó không phải là ngôn ngữ, đó là cách bạn sử dụng nó. Nếu một triển khai dài dòng, chỉ cần gói gọn nó đằng sau một sự trừu tượng tốt đẹp. Nhiều GPL cung cấp các cơ chế đầy đủ cho việc này.
Chỉ cần tưởng tượng đoạn mã Java ở trên được viết bằng XML. Thay thế dấu ngoặc đơn bằng dấu ngoặc góc và di chuyển chúng xung quanh. Và sau đó sao chép mọi từ khóa dưới dạng thẻ đóng! Java là một cú pháp là không dài dòng.
(Tôi biết, so sánh với XML giống như lấy kẹo từ bé, nhưng rất nhiều bản dựng chỉ được định nghĩa trong XML.)
"Bạn sẽ phải biên dịch tập lệnh xây dựng của mình"
Đây là một điểm hợp lệ. Tuy nhiên, đó chỉ là một vấn đề kỹ thuật nhỏ cần giải quyết. Tôi có thể giải quyết nó bằng cách sử dụng beanshell hoặc một số trình thông dịch khác. Thay vào đó, tôi đã giải quyết nó bằng cách coi nó như một vấn đề xây dựng khác và bootstrapping iwant với một tập lệnh shell hoặc ant đơn giản để biên dịch và chạy một bootstrapper Java đơn giản.
"Java có bản tóm tắt"
Thật. Bạn phải nhập các lớp, bạn phải đề cập đến "công khai", "lớp", v.v. Và ở đây DSL đơn giản bên ngoài ghi được một chiến thắng dễ dàng ban đầu.
Và nếu dự án của bạn tầm thường đến mức cái nồi hơi này rất có ý nghĩa, xin chúc mừng. Vấn đề của bạn không phải là một vấn đề khó khăn và nó thực sự không quan trọng bằng cách bạn giải quyết nó.
Nhưng nhiều dự án cần nhiều hơn là biên soạn, báo cáo bảo hiểm và đóng gói. Nếu bản tóm tắt của Java được chấp nhận cho các vấn đề của khách hàng, tại sao không xây dựng các vấn đề? Tại sao chỉ làm giày cho trẻ em của người khác?