Chúng tôi có dự án Maven Java Spring Spring Hibernate lớn đang ngày càng lớn hơn.Dự án Java trở nên quá lớn
vấn đề:
- thời gian xây dựng là 10-12 phút ở tốt nhất; 3 phút mà không cần thử nghiệm
- Chúng tôi đã có công tắc dòng lệnh để bỏ qua các mô-đun hiếm khi được sửa đổi, đó là triệu chứng của quá trình xây dựng đạt đến giới hạn thực tế
- Eclipse đang gặp khó khăn trong việc quản lý dự án (mặc dù IntelliJ vẫn ổn)
- Mọi thứ trở nên tồi tệ hơn khi dự án phát triển và càng nhiều kịch bản từ nhóm thử nghiệm được kết hợp làm kiểm tra tích hợp trong cơ sở mã.
Làm thế nào chúng tôi làm việc tại
- Dự án được cấu hình trong khoảng 20 module Maven, như vậy:
Parent |--- Tier1 |--- Tier2 |--- WebTier |---- ModuleA |---- ModuleB |---- ModuleC |---- ... |---- Entities |---- Shared |---- Batch |---- IntegrationTests
- Ứng dụng này được xây dựng như một WAR đơn
- Nhà phát triển triển khai một cấp duy nhất (typicall y
WebTier
) như một đồ tạo tác từ Eclipse hoặc IntelliJ đến địa chỉ Tomcat - Mặc dù dự án dường như được phân tách độc đáo trong các mô-đun, có nhiều điểm ghép nối không mong muốn giữa chúng. Đặc biệt trong
Shared
, nơi các module cần "cross-module" truy cập đặt dịch vụ của họ - Tất cả các xét nghiệm hội nhập đang ở trong một mô-đun chuyên dụng (không biết tại sao)
Ý tưởng để làm cho nó tốt hơn
- Thêm mô-đun
MessageBroker
để cho phép khớp nối lỏng lẻo khi có liên quan. Có lẽ JMS, hoặc đơn giản là một câm trong bộ nhớ thành phần cho thông tin liên lạc đồng bộ - Loại bỏ các module
Shared
- Hãy chắc chắn rằng các module có hạt thô nhập cảnh điểm
- Tháo khớp nối không mong muốn giữa anh chị em ruột và thích người môi giới thông báo khi có thể
- Có thể giữ
Entities
. Ít nhất là các thực thể kinh doanh cốt lõi (Customer, CustomerFile, ...). Nhưng một số thực thể rõ ràng là thuộc về một mô-đun duy nhất (một thông tin thực hiện hàng loạt sẽ là trong moduleBatch
)
Bằng cách đó, bất cứ ai làm cho một sự thay đổi để ModuleA
sẽ hầu hết thời gian duy nhất xây dựng và chạy thử nghiệm trong mô-đun mà không sợ phá vỡ ứng dụng.
Câu hỏi
- Liệu rằng có vẻ như một kế hoạch tốt?Bởi tốt, tôi có nghĩa là trong tương lai, với cơ hội tốt để cải thiện mọi thứ, và không đòi hỏi quá nhiều công việc cho tình huống
- Nếu chúng ta có 1 dự án Eclipse/IJ trên mỗi tầng, hãy để IDE xây dựng đồ tạo tác và triển khai nó cho Tomcat, hay chúng ta nên có 1 dự án cho mỗi mô-đun và phụ thuộc vào Nexus? Hoặc có thể tùy chọn thứ hai là quá mức cần thiết?
- Bất kỳ đề xuất nào khác?
Một số số liệu
- Windows 7, Java 8, Maven 3.0.3, TestNG.
- SSD hoặc HDD 7200rpm (tác động hạn chế)
- 6Gb RAM
- Heap 1Gb (maven)
- CI với Jenkins
Cảm ơn một bó!
Có vẻ như bạn có thể cần RAM lớn hơn hoặc nhiều RAM hơn (hoặc cả hai). –
Bạn có thể cung cấp thêm một chút thông tin về quy mô của dự án không? Thực sự chỉ có 20 module maven và mất 10-13 phút xây dựng thời gian (âm thanh cực kỳ chậm). Có bao nhiêu bài kiểm tra đang chạy? Các xét nghiệm mất bao lâu? Bạn đang sử dụng phiên bản Maven nào? Có bao nhiêu dòng mã (đo bằng SonarQube?) Bạn đang chạy một giải pháp CI như jenkins? Bạn đang nói về loại công tắc dòng lệnh nào? Bạn có máy xây dựng chuyên dụng không? Làm thế nào nhiều RAM/CPU vv và loại đĩa cứng nào máy này có? Bao nhiêu RAM/CPU làm stationgs làm việc có? Hệ điều hành nào? – khmarbaise
@khmarbaise Công tắc dòng lệnh chỉ là một '-DskipSomeModules' khớp với một cấu hình maven để bỏ qua một số mô-đun hiếm khi được sử dụng. Không có gì đặc biệt ở đây, chỉ là một điều kỳ quặc cho thấy chúng tôi không làm đúng IMO. Chúng tôi có CI với Jenkins nhưng có vẻ như không liên quan ở đây: đó là xây dựng dev địa phương mà đau, và nó chỉ có thể được thực hiện bằng cách xây dựng WAR đầy đủ vì khớp nối thường xuyên. Sẽ lấy lại cho bạn thông tin được yêu cầu vào ngày mai. Cảm ơn bạn. – youri