2012-02-10 32 views
5

Hãy xem xét những điều sau đây ứng dụng doanh nghiệp ví dụ layering:Tư vấn về việc tạo cấu trúc dự án Maven - Nhiều mô-đun so với nhiều dự án?

  1. dự án dịch vụ -> Dịch vụ POJO lớp
  2. dự án web -> ứng dụng Web, phụ thuộc vào 'dự án dịch vụ, triển khai như một WAR
  3. project-web-services -> Web Services, phụ thuộc vào 'project-services', được triển khai dưới dạng WAR riêng biệt, hiện không được hiển thị qua internet
  4. dự án độc lập -> Công việc Cron, tùy thuộc vào 'dự án-dịch vụ'

Cách tiếp cận phù hợp để tổ chức điều này trong Maven là gì? Tôi có nên tạo một dự án maven đa mô-đun không? nếu 'project-services' là mô-đun Maven, nó có thể được chia sẻ với ba dự án khác mà mỗi dự án là một đơn vị có thể triển khai độc lập không?

Trong các dự án trước đây của tôi, tôi đã tạo 4 dự án Maven khác nhau và không bao giờ cảm thấy cần nhiều thứ khác.

Muốn xác thực xem có cách nào tốt hơn những gì tôi đã làm trước đây hay không.

Trả lời

2

Bạn thực sự có thể thực hiện một trong hai cách tiếp cận. Nếu nó thực sự là một dự án lớn, bạn luôn muốn xây dựng và phát hành cùng một lúc, một dự án đa mô-đun phù hợp. Bạn sẽ thiết lập nó như thế này có thể:

pom project (top level project that would define all of the modules) 
    jar project (project-services) 
    war project (project-web) 
    war project (project-web-services) 
    project-standalone (wasn't sure if this was a jar, or just some scripts, etc) 

Vì vậy, bạn chỉ xây dựng và phát hành dự án gốc và nó sẽ quản lý tất cả các mô-đun phụ cho bạn. Họ có thể có phụ thuộc vào nhau (chỉ cần cẩn thận của phụ thuộc vòng tròn). Và bạn sẽ được thiết lập để đi.

Tùy chọn khác hoàn toàn là các tạo tác riêng biệt. Lợi ích có chu kỳ phát hành khác. Đó là một lựa chọn tốt khi bạn có một thư viện jar không thay đổi thường xuyên, nhưng bạn thường xuyên cập nhật chiến tranh.

Và rõ ràng, bạn có thể có một hỗn hợp, vì vậy có lẽ bình là độc lập, nhưng bạn có một dự án đa mô-đun có chứa hai tệp chiến tranh. Lợi ích của maven là nó đủ linh hoạt để xử lý bất kỳ trường hợp kinh doanh nào bạn có để chia sẻ.

0

Tôi chắc chắn sẽ đi với một dự án duy nhất với các mô-đun để đảm bảo rằng các phiên bản được sử dụng của các thư viện bên thứ ba phổ biến phù hợp.

Có một dự án POM làm gốc và có tất cả triển khai và các đồ tạo tác khác chia sẻ nó thường được coi là một thực hành tốt cho mọi thứ trừ các dự án đơn mô-đun.

1

Tại nơi làm việc của mình, chúng tôi có nhiều dự án cấp cao nhất chia sẻ thư viện (15 dự án cấp cao nhất chia sẻ 35 thư viện hoặc hơn). Chúng tôi đã đi với dự án duy nhất cho mỗi phương pháp thư viện. Hôm nay, khi chúng ta phải giải phóng tất cả chúng trong một lần, đó là một cơn ác mộng.

Một số vấn đề chúng ta phải đối mặt:

  • thủ tìm ra phụ thuộc
  • Phải chạy việc phát hành theo đúng thứ tự
  • Một thất bại dừng toàn bộ phiên bản

Nếu tôi phải d tất cả lại một lần nữa (tôi đã giúp thiết lập tất cả điều này), tôi sẽ sử dụng một dự án đa mô-đun duy nhất. Nếu không có gì khác, việc giải phóng mọi thứ trong một lần là một lợi thế rất lớn. Các dự án có thể không nhìn đẹp trong nhật thực nhưng đó không phải là những gì bạn nên nhắm đến.

+0

Nhược điểm của một dự án lớn là bạn thường phát hành các hiện vật không có bất kỳ thay đổi nào. Tôi hiểu vấn đề phát hành, có thể trong trường hợp của bạn, bạn thực sự thay đổi tất cả các tạo tác mỗi khi bạn định phát hành ... trong trường hợp đó nó ít rắc rối hơn. Nhưng đôi khi bạn chỉ cần phát hành một tạo tác, giải phóng tất cả chúng mà không có thay đổi nào nhỏ hơn lý tưởng. – Michael

0

Vì bạn có một số phụ thuộc trực tiếp giữa các mô-đun, tôi cũng khuyên bạn nên sử dụng dự án đa mô-đun.

Điều tôi thường khuyên là xem xét vòng đời của các mô-đun. Ví dụ: nếu bạn sẽ phát hành mô-đun lô nhiều hơn thường xuyên so với lớp dịch vụ, điều đó có thể có ý nghĩa để tách nó ra xa nhau. Vì vậy, bạn không cần phải phát hành (triển khai) những thứ không có thay đổi. Vì lô thường không được triển khai giống như các tệp .war. Nhưng điều đó phụ thuộc vào vòng đời của dịch vụ + mô-đun hàng loạt.

Trong hầu hết các trường hợp, di chuyển song song. Vì vậy, +1 cho "một cho tất cả"

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