2011-10-21 46 views
10

Chúng tôi có một mô-đun maven được thiết lập như vậy:Maven - bao gồm tất cả các môđun con của một pom như phụ thuộc trong một mô-đun

a (parent) 
    -> b (submodule) 
    -> c (submodule) 
    -> d (submodule) 

Danh sách này của submodules được thiết lập để phát triển trong thời gian tới (đến một danh sách 20 hoặc hơn). Chúng tôi có một mô-đun khác sẽ bao gồm dưới dạng phụ thuộc tất cả các mô-đun con của a. Có một cách gọn gàng để làm điều này, thay vì phải tự giữ danh sách submodule đồng bộ với danh sách phụ thuộc. I E. có cách nào để bao gồm một và tất cả các mô-đun con dưới dạng phụ thuộc không?

Trả lời

0

Cách phụ thuộc duy nhất có được "tự động" được bao gồm thông qua cơ chế phụ thuộc chuyển tiếp và nó chỉ hoạt động bằng cách kéo phụ thuộc vào phụ thuộc, vì vậy trừ khi bạn có pom phụ thuộc vào tất cả các mô-đun con, không, bạn sẽ không nhận được chúng mà không liệt kê tất cả chúng ra. Một điều cần làm là chỉ ra một lỗ hổng trong thiết kế dự án của bạn. Nếu các mô-đun là "tất cả hoặc không có", thì chúng có thể không phải là các mô-đun riêng biệt.

3

Bạn có một vài lựa chọn ở đây:

  1. Không có thay đổi. Liệt kê tất cả các phụ thuộc trong mỗi pom. Tuy nhiên, nếu họ có một phụ huynh chung, bạn có thể sử dụng dependencyManagement trong pom cha mẹ để thiết lập các phiên bản cho các phụ thuộc khác nhau. Trong poms con, bạn không cần phải liệt kê phiên bản. Xem this section from Maven By Example. Một nhược điểm của phương pháp này là bạn phải liệt kê lại các phụ thuộc giống nhau nhiều lần.
  2. Tạo danh sách cha mẹ liệt kê tất cả các phụ thuộc được chia sẻ. Xem ví dụ here. Một nhược điểm ở đây là bạn đang hạn chế tất cả các dự án muốn tận dụng điều này để sử dụng một dự án cha mẹ khi họ có thể cần phải sử dụng một dự án cha khác vì một lý do nào đó.
  3. Đợi Maven mixins, lần cuối tôi nghe là still not ready.
  4. Suy nghĩ lại thiết kế của bạn. Nó có ý nghĩa đối với các dự án phụ thuộc vào rất nhiều mô-đun và giao diện khác nhau không? Để giảm coupling, bạn có thể muốn tạo một giao diện mà những dự án mới này có thể sử dụng. Một số dự án đa mô-đun nguồn mở, chẳng hạn như Apache Axis2, làm theo mẫu này. Một mô-đun chứa 20 phụ thuộc của bạn và hiển thị một giao diện mà các mô-đun mới có thể gọi. Các mô-đun mới chỉ có thể liệt kê một mô-đun chính là phụ thuộc và tất cả 20 phụ thuộc được kéo vào như các phụ thuộc chuyển tiếp.

Tôi nghĩ lựa chọn số 4 có lẽ đúng, nhưng tôi không quen thuộc với hoàn cảnh của bạn.

+0

Tôi có vấn đề tương tự. cách tiếp cận # 4 có vẻ là một lựa chọn tốt. Sẽ hữu ích nếu có/bạn có thể chỉ cho tôi bất kỳ ví dụ nào về phương pháp # 4? –

1

Cân nhắc thiết kế sang một bên, điều này có thể dễ dàng thực hiện - chỉ cần bao gồm <type>pom</type> trong phụ thuộc của bạn trỏ vào cha mẹ. Ví dụ:

<dependency> 
    <groupId>my.group.id</groupId> 
    <artifactId>a</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <type>pom</type> 
</dependency> 
Các vấn đề liên quan