2012-11-14 25 views
8

Tôi đã tìm kiếm một lúc và không tìm thấy giải pháp làm việc hoặc hướng dẫn/hướng dẫn nào để phát hành các mô-đun Maven khi sử dụng các mô-đun con Git lồng nhau.Phát hành nhiều tạo phẩm Maven khi sử dụng các mô-đun con Git lồng nhau

Chúng tôi có một cấu trúc phức tạp của các dự án công cộng và riêng tư yêu cầu một thứ tự cụ thể để xây dựng thành công. Mục tiêu của chúng tôi là thực hiện một bản phát hành Maven để gắn thẻ và triển khai nhiều hiện vật Maven trong một bước.

Đây là đơn giản hóa Maven dự án/mô-đun và Git cấu trúc kho:

parent-public:1.0.0:pom (descriptor only, no Maven modules, public Git repository) 
    | | 
    | |- public-module:1.0.0-SNAPSHOT:jar 
    |  (Maven module, child of parent-public, Git submodule, public repository) 
    | 
    |- parent-private:1.0.0-SNAPSHOT:pom 
    (Maven modules, Git submodule, private repository) 
     | 
     |- public-module:1.0.0-SNAPSHOT:jar 
     | (Maven module only, child of parent-public, Git submodule, public repository, released) 
     | 
     |- private-module:1.0.0-SNAPSHOT:war 
      (Maven module, child of parent-private, released) 

Cấu trúc hiện nay cho phép Maven để xây dựng và triển khai các dự án/modules độc lập.

Khi phát hành public-module (từ mẹ-công cộng/mẹ-private/public-mô-đun thư mục), các maven-release-plugin hoạt động tốt (kho Git đã được gắn thẻ và phát hành cổ vật đã được triển khai).

Khi phát hành parent-private, các maven-release-plugin chuẩn bị và bắt đầu thực hiện việc phát hành trước khi thất bại trong mục tiêu thanh toán (vấn đề này sẽ được thảo luận here, nhưng giải pháp không hoạt động trong bối cảnh của tôi và không đủ uy tín để bình luận).

Đây là hiện tại maven-release-plugin cấu hình:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <tagNameFormat>[email protected]{project.version}</tagNameFormat> 
     <commitByProject>true</commitByProject> 
     <pushChanges>true</pushChanges> 
    </configuration> 
</plugin> 

Có một cách thanh lịch để tổ chức các module Maven và kho Git để giải phóng nhiều hiện vật Maven? Ngoài ra, đã có ai đó tìm thấy một giải pháp để sao chép đệ quy Git submodules trong quá trình kiểm tra ngay trước khi triển khai hiện vật?

+0

Đó có vẻ là một đa maven xây dựng mô-đun mà trong đó cần phải được trong một kho Git duy nhất thay vì submodules.Sau đó, bằng cách sử dụng một xây dựng đa mô-đun, bạn chỉ có thể triển khai/phát hành toàn bộ các mô-đun trong một bước.Vì vậy, câu hỏi là tại sao bạn muốn làm cho mọi thứ phức tạp hơn – khmarbaise

+0

@khmarbaise: cảm ơn vì bình luận của bạn Chúng tôi đã quyết định đi một kho Git với nhiều mô-đun Maven vì chúng tôi không thể tìm thấy giải pháp _simple_ cho cấu trúc dự án của chúng tôi – almeidap

+1

IMHO thực sự không có lựa chọn nào tốt. các bước trong khi phát hành đang tạo một _tag_, với thứ e ngữ nghĩa khôi phục mã từ thẻ này sẽ cung cấp cho tôi tất cả mã cho bản phát hành này. Nhưng với các mô-đun con GIT, không có cách nào để đảm bảo rằng người dùng nhận được mọi thứ từ thẻ đó, bởi vì anh ta có thể dễ dàng nhìn thấy mô-đun con như là mô-đun đầu tiên. –

Trả lời

5

Câu trả lời cho câu hỏi này sẽ không thỏa mãn câu hỏi ban đầu, nhưng plugin Phát hành Maven không đủ thông minh để hiểu được các ranh giới phụ của git. Tôi nghĩ rằng những gì bạn đang tìm kiếm là khả năng cho các plugin phát hành Maven để cảm nhận rằng một thư mục trỏ đến một submodule và cho plugin phát hành này để tự động tag trên ranh giới? Điều này sẽ không xảy ra, và tôi không nghĩ rằng đó là kế hoạch của bất cứ ai vào thời điểm này.

Những gì tôi luôn khuyên người dùng Maven sử dụng Git không bao giờ phá vỡ ranh giới của một dự án đa mô-đun cần sử dụng plugin Phát hành trên các mô-đun con. Giữ nó giới hạn trong một kho lưu trữ duy nhất.

Một lần nữa, đây không phải là một câu trả lời tuyệt vời, nhưng khi sử dụng Maven phát hành Plugin trong nhiều năm, nó cũng là sự thật rằng nó không phải là một plugin tuyệt vời :-(

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