2010-07-27 38 views
12

Tôi rất mới với Maven và bây giờ tôi đang cố thiết lập cây dự án đầu tiên của mình. Tôi đang đấu tranh để hiểu sự khác biệt giữa hai lựa chọn thay thế:Maven: Tổng hợp và phụ thuộc

Tôi có các dự án chiến tranh và bình chứa (mỗi hai) mà tôi muốn gói. Theo truyền thống, tôi chỉ cần tạo ra một dự án tai có tất cả bốn trong số đó là phụ thuộc.

Bây giờ tôi đã đọc về tổng hợp poms và không chắc chắn phải làm gì nữa (xem http://maven.apache.org/pom.html#Aggregation). Tôi có nên tạo một POM tổng hợp với bốn dự án không?

Tôi đoán về cơ bản câu hỏi của tôi là: Sự khác biệt lớn giữa mô-đun và phụ thuộc là gì, nếu phụ thuộc là một trong các dự án "của riêng tôi".

+0

quy ước tại SO là sử dụng thẻ maven-2, trừ khi bạn đang đề cập đến phiên bản maven (đã chết) 1. Đó là một phiền toái, nếu bạn hỏi tôi, nhưng đó là cách thực hiện. Thay đổi điều đó cho bạn. –

Trả lời

11

Mô-đun chỉ là cách tổ chức mọi thứ.

Trong bản dựng nhiều mô-đun, bạn có thể tạo toàn bộ cây tạo tác trong một bước (nhớ số Joel Test). Tuy nhiên, mỗi trong số đó sẽ là một tạo tác riêng lẻ, có thể được tham chiếu riêng lẻ dưới dạng sự phụ thuộc.

Đây là bố cục mẫu, bao bì trong dấu ngoặc đơn.

root (pom) 
    - project1 (jar) 
    - project2 (war) -> references project1 as dependency 
    - project3 (jar) 
    - project4 (war) -> references project3 as dependency 
    - project5 (ear) -> references project2 and project4 as dependency 

gọi mvn install trong thư mục gốc để tạo toàn bộ cây.

Giả thiết ở đây là project1 chỉ được sử dụng bởi project2 và project3 chỉ được project4 sử dụng. Nếu không, đây là một kịch bản phức tạp hơn.

root (pom) 
    - project1 (jar) 
    - project2 (jar) 
    - project3 (war) -> references project1 and project2 as dependency of scope provided 
    - project4 (war) -> references project1 and project2 as dependency of scope provided 
    - project5 (ear) -> references project1 through project4 as dependency 

Vì vậy, mô-đun lấy đi công việc xây dựng một số dự án độc lập, nhưng bạn vẫn cần tự quản lý các phụ thuộc của mình.

+2

Cảm ơn câu trả lời của bạn! Chỉ cần làm rõ: Nếu, trong ví dụ của bạn, tôi sẽ không sử dụng dự án 'root' nhưng chỉ xây dựng project5 (tức là 'mvn install' ở đó), sau đó nó sẽ tự động biên dịch lại dự án 1-4, đúng không? Tôi đoán đó là những gì tôi giả định sai và điều gì dẫn đến sự nhầm lẫn của tôi. – apropoz

+0

chính xác. maven hoạt động ở đâu đó nhưng bên dưới thư mục hiện tại. nó sẽ giải quyết các hiện vật khác từ kho lưu trữ cục bộ hoặc từ xa, nhưng nó sẽ không tái tạo chúng trừ khi chúng nằm bên trong cây hiện tại. –