2010-11-15 12 views
8

Tôi có một dự án mô-đun đa mô-đun và tôi muốn có thể chạy một hoạt động (antrun) sau khi tất cả các mô-đun con đã hoàn thành việc thực hiện của chúng.Dự án đa mô-đun Maven - cách chạy một hoạt động sau khi tất cả các mô-đun con đã hoàn thành

Trong các dự án của tôi, tôi tạo RPM từ mỗi mô-đun phụ và trong giai đoạn triển khai, tôi sao chép RPM (bằng ssh) sang một kho lưu trữ RPM.
RPM repo yêu cầu tôi chạy lệnh createdb sau khi thêm RPM mới để có thể lập chỉ mục chúng.
Vì vậy, tôi có một antrun thực sự chạy scp và sao chép RPM vào repo. Nó chạy cho mỗi mô-đun con thực sự tạo ra một RPM và được nối với maven triển khai giai đoạn. Những gì tôi có thể làm là sau mỗi scp chạy lệnh createrepo nhưng điều đó sẽ lãng phí, tôi có hơn 10 submodules và mỗi createrepo mất khoảng một phút vì vậy tôi sẽ lãng phí thời gian xây dựng quý giá.

Điều tôi muốn làm là sau khi tất cả các mô-đun con đã hoàn tất, sau đó chạy trình tạo. Một lần.

Nỗ lực đầu tiên của tôi là để treo antrun gọi lệnh createrepo tới pom của cha mẹ (super-pom) triển khai giai đoạn. Tôi đã làm điều đó và vấn đề là giai đoạn triển khai của phụ huynh chạy trước giai đoạn triển khai của mô-đun con. Tôi muốn nó chạy sau
Tôi không thể đính kèm anterepo antrun vào bất kỳ giai đoạn nào sau này vì giai đoạn triển khai là giai đoạn cuối cùng trong vòng đời. Vì vậy, câu hỏi của tôi là: Có cách nào để chạy một trình dọn dẹp "dọn dẹp" hoặc một plugin nói chung sẽ được thực hiện một lần, sau khi tất cả các hoạt động xây dựng của tất cả các mô-đun con đã kết thúc thành công không? Có phải không?

Việc hack xung quanh nó sẽ tạo một mô-đun con khác và đảm bảo nó là cuối cùng bằng cách làm cho nó phụ thuộc vào tất cả các mô-đun khác và chạy trình tạo từ giai đoạn triển khai của mô-đun này. Nhưng đó là xấu và khó để duy trì. Tôi thích một giải pháp sạch hơn.

Cảm ơn

phiên bản Maven là 2.2.1

+0

Bạn đã đưa ra giải pháp đẹp hơn? –

Trả lời

3

Tôi không như vậy chắc chắn rằng đề nghị cuối cùng của bạn tạo ra một mô-đun chuyên dụng phụ thuộc vào tất cả những người khác là quá xấu xí. Sau khi tất cả, nó là tận dụng quản lý phụ thuộc của Maven. Bạn có thể đặt tên nó theo một cách rất rõ ràng để làm cho nó rõ ràng cho người bảo trì những gì đang xảy ra và nó sẽ phù hợp với độc đáo với quá trình xây dựng tổng thể của dự án.

Tại sao không đặt nó vào vị trí và xem nó hoạt động tốt như thế nào cho bạn? Hãy nhớ rằng mã làm việc nhịp đập mã đẹp nhưng không hoạt động mỗi lần.

+0

Buổi hòa nhạc của tôi là bảo trì (khi thêm các mô-đun mới) và rõ ràng là v/s hack. Tôi sẽ đi với điều đó nếu không có giải pháp tích hợp và rõ ràng khác – Ran

+3

Tôi đồng ý, một mô-đun được đặt tên cụ thể cho nhiệm vụ này làm cho rất nhiều ý nghĩa. Bạn cũng có thể đặt nó trong một cấu hình riêng biệt để nó chỉ chạy cho một triển khai cụ thể. –

0

Tôi đang sử dụng giải pháp tách tòa nhà và bao bì khỏi công cụ xuất bản. Khi chúng ta đang sử dụng Jenkins, mọi build đều gọi công việc publish mà xử lý cũng là công cụ createrepo, và thậm chí điều thú vị hơn là Jenkins cho phép bạn cũng chạy công việc publish này trong paralel. Điều khó khăn là thực sự trong giai đoạn createrepo nếu hai công việc chạy trong cùng một thời điểm tất nhiên sẽ thất bại, vì họ không thể thực hiện thao tác tương tự trong cùng một thư mục trên cùng một tập hợp các tệp. Tuy nhiên, tôi đã triển khai đàn chỉ ở đây cho giai đoạn createrepo, và bây giờ tất cả các công việc đang chạy thực sự song song cộng với ba xuất bản song song cũng đã được thử nghiệm, nhưng chúng tôi đang sử dụng hai do một số quyết định khác.

Tuy nhiên, bằng cách sử dụng phương pháp này, chúng tôi đã giảm tổng thời gian xây dựng từ 1,5 đến 15 phút trong tổng số hai mươi + bản dựng.

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