2012-04-07 28 views
5

Tôi đã xem xét các dự án đa mô-đun trong Maven và tôi chỉ có thể tìm thấy các ví dụ về các mô-đun hiện có dưới dạng thư mục con cho dự án mẹ. Tôi có thể nhầm lẫn trong việc suy ra điều này rằng không có cách nào để chia sẻ một mô-đun giữa hai dự án maven mà không cần phải gói nó lên và triển khai nó vào một kho lưu trữ? Điều đó sẽ tấn công tôi như không cần thiết cồng kềnh. Ví dụ, nói rằng tôi đang tích cực làm việc trên hai dự án liên quan không nói chuyện với nhau ngoại trừ thông qua một cây cầu API tôi đang làm việc mà tôi dự định sử dụng cho những thứ trong tương lai. Tôi có thể làm việc đó. Cây cầu được cập nhật liên tục như là công việc trên hai tiến độ dự án.Mô-đun Maven có phải là thư mục con của dự án mẹ không?

Vì vậy, nếu tôi muốn tận dụng các module Maven cho nỗ lực này, một pom.xml dự án sẽ trông như thế này ...

<groupId>net.syndog</groupId> 
<artifactId>myproject</artifactId> 
. 
. 
. 
<modules> 
    <module>myproject-bridge</module> 
</modules> 

... và một ngoại hình như thế này ...

<groupId>net.syndog</groupId> 
<artifactId>myotherproject</artifactId> 
. 
. 
. 
<modules> 
    <module>myproject-bridge</module> 
</modules> 

Giả sử các mô-đun trong Maven phải là thư mục con của các dự án mà chúng là một phần của, dự án myotherject và myotherproject của tôi đều sử dụng mô-đun cầu nối myproject cùng một lúc như thế nào?

Điều này thậm chí có thể thực hiện được với Maven hay tôi phải đóng gói và triển khai cầu nối dự án của mình cho repo mỗi khi tôi thực hiện một chỉnh sửa cho nó? Có lẽ tôi đã nhầm lẫn, nhưng điều này có vẻ như nó sẽ là một vấn đề phổ biến, nhưng không ai có vẻ đang nói về nó. Tôi đang đi về điều này tất cả sai?

Trả lời

5

Cách thông thường của việc sử dụng một sự phụ thuộc như vậy là để xác định một sự phụ thuộc mà kết quả trong việc này:

<dependency> 
    <groupId>net.syndog</groupId> 
    <artifactId>xyz-api</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</dependency> 

nhưng kết quả của phương pháp này là bạn cần phải có một dự án riêng biệt, trong đó có chính xác api này. Điều này có thể được đơn giản hóa bằng cách sử dụng một IDE để giải quyết các phụ thuộc giữa các dự án thông qua các không gian làm việc thay vì kho lưu trữ.Nếu không, bạn cần phải thường xuyên cài đặt mvn (nếu bạn chỉ làm việc cục bộ) hoặc triển khai mvn (thông qua trình quản lý kho lưu trữ).

Các giải pháp khác sẽ được sử dụng một dự án đa mô-đun thực mà sẽ trông như thế này:

+-- pom.xml (root) 
+-- myproject-bridge 
    +--- pom.xml 
+-- myproject-a 
    +--- pom.xml 
+-- myproject-b 
    +--- pom.xml 

nơi dự án-a và dự án-b bằng cách sử dụng myproject cầu thông qua một sự phụ thuộc đơn giản. Trong thư mục gốc bạn xác định các module (như bạn nói) thông qua

<modules> 
<module>myproject-bridge</module> 
<module>myproject-a</module> 
<module>myproject-b</module> 
</modules> 

và trong myproject-một bạn chỉ cần xác định

<dependency> 
    <groupId>net.syndog</groupId> 
    <artifactId>xyz-api</artifactId> 
    <version>${project.version}</version> 
</dependency> 

và trong myproject-b cùng một cách. Bạn phải biết rằng việc sử dụng một mô-đun không nhất thiết có nghĩa là để xác định sự phụ thuộc. Điều này mang lại cho bạn cơ hội sử dụng cầu nối myproject từ một dự án hoàn chỉnh khác hoặc sau khi phát hành hoặc dưới dạng SNAPSHOT.

0

Theo hiểu biết của tôi, một mô-đun phải nằm trong thư mục con của projet của cha mẹ.

Để chia sẻ phần mềm hỗ trợ cầu nối của bạn, bạn phải triển khai nó trên kho lưu trữ của mình, vì vậy hai ứng dụng khác có thể có sự phụ thuộc vào nó.

Nếu bạn đang làm việc với Eclipse, cách giải quyết này sẽ làm hỏng bạn.

  • Yêu cầu 3 projet trong không gian làm việc của bạn.
  • Hãy chắc chắn rằng tất cả các dự án được khai báo là Dự án Maven.
  • Đối với cả hai dự án, hãy thêm mybridge làm phụ thuộc.
  • Đối với cả hai dự án, nhấp chuột phải, sau đó chọn Maven -> bật độ phân giải không gian làm việc.

Vì vậy, thay vì đọc kho lưu trữ của bạn, Eclipse sẽ liên kết mybridge depedency với một trong không gian làm việc Eclipse của bạn.

Mỗi khi bạn thay đổi mybridge thì hai dự án khác sẽ bị ảnh hưởng.

Có thể có cách nào tốt hơn, tôi không phải là chuyên gia lớn nhất trong Maven.

Trân trọng.

2

Từ các tài liệu trong Maven schema descriptor:

Các module (đôi khi được gọi là tiểu dự án) để xây dựng như một phần của dự án này. Mỗi mô-đun được liệt kê là một đường dẫn tương đối đến thư mục chứa mô-đun.

3

Nếu chúng ta lấy câu hỏi để được rằng trong tiêu đề, sau đó câu hỏi là thế này:

Có một module Maven đã trở thành một thư mục con của một dự án cha mẹ?

Miễn là câu hỏi về các dự án đa mô-đun Maven chứ không phải dự án Maven kế thừa, thì câu trả lời cho câu hỏi đó là "Không". Đây là lý do tại sao.

Như matsev's answer trên làm cho rõ ràng, "Mỗi module được liệt kê là một người họ hàng con đường đến thư mục chứa các mô-đun (nhấn mạnh thêm)." Nó không cần phải là một thư mục con, miễn là nó là một đường dẫn tương đối từ siêu dự án (tôi tránh các thuật ngữ "cha mẹ" và "con" để không liên quan đến khái niệm không liên quan đến các dự án kế thừa) -dự án. Ràng buộc này có thể được thỏa mãn theo nhiều cách khác nhau có thể phụ thuộc vào hệ điều hành. Ví dụ: bạn có thể bao gồm các phần tử đường dẫn thư mục mẹ (..) để đi qua thư mục mô-đun phụ. Hoặc, bạn có thể sử dụng các liên kết tượng trưng. Trong mọi trường hợp, không, không đúng là mô-đun Maven phải là một thư mục con của thư mục của một dự án đa mô-đun Maven.

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