2012-09-26 34 views
5

tôi có các dự án sau được tổ chức một cách có cấu trúc phẳng:Maven dự án đa mô-đun và Jenkins

parentProject 
+-pom.xml 

projectWeb <depends on libraryA and libraryB> 
+-pom.xml 

libraryA 
+-pom.xml 

libraryB 
+-pom.xml 

Các pom.xml bên trong parentProject có tham chiếu đến các module khác và nó được sử dụng để thừa kế và dependencyManagement, đây là một đoạn trích:

<project> 
    .... 
    <modules> 
     <module>../projectWeb</module> 
     <module>../libraryA</module> 
     <module>../libraryB</module> 
    </modules> 
    <dependencyManagement> 
    ... 
    </dependencyManagement> 
    <build> 
    ... 
    </build> 
    .... 
</project> 

Trong Jenkins tôi có một công việc maven cho từng dự án, và nó hoạt động tốt khi tôi xây dựng parentProject, tức là. xây dựng mọi dự án được tham chiếu trong phần modules. Vấn đề mà tôi có là khi tôi cam kết với SVN một sự thay đổi trong libraryA, tôi hy vọng rằng sau khi xây dựng libraryA, xây dựng lại để projectWeb được khởi chạy, nhưng điều đó đã không xảy ra. Bất cứ ai cũng biết tôi đang làm gì sai?

Xin cảm ơn trước.

EDIT

Khi tôi loại bỏ các phần modules từ parentProject\pom.xml, nó hoạt động như espected, nhưng tôi mất lợi thế kết hợp của việc có một pom mẹ.

Trả lời

0

Điều này sẽ được định cấu hình trong công việc jenkins. Xem "libraryA việc"/"Cấu hình"/"Xây dựng Triggers"/"Xây dựng sau khi các dự án khác đang được xây dựng"

+0

Cảm ơn bạn đã trả lời, nhưng khi tôi đặt câu hỏi đã chỉnh sửa, Nếu tôi xóa các mô-đun khỏi pom cha mẹ, các bản dựng được kích hoạt như mong đợi, tức là nếu tôi xây dựng 'libraryA' thì' proyectWeb' được xây dựng tự động mà không có cấu hình bạn đã đề cập. – sivainvi

1

Dường như bạn đang yêu cầu POM cha mẹ của bạn để làm hai việc:

  1. Thiết lập quản lý phụ thuộc thứ
  2. tổng hợp xây dựng của bạn

Đó là nói chung tốt hơn nếu bạn chia này ra thành hai poms - một pom mẹ cho # 1 và một pom tổng hợp cho # 2. Sau đó bạn sẽ có cái gì như ..

[root dir] aggregate pom.xml 
+ /parent 
+ /web 
+ /libA 
+ /libB 

Xem câu trả lời này để biết thêm chi tiết: https://stackoverflow.com/a/3301162/211993

sau đó bạn muốn cấu hình Jenkins kiểm tra thư mục gốc và chạy "mvn clean install"

+2

Bạn có thể vui lòng giải thích lý do tại sao "Nói chung tốt hơn nếu bạn chia ..."? Tôi không nói nó không phải nhưng tôi không hiểu tại sao nó tốt hơn. Đáng tiếc là tôi không hiểu nó từ câu trả lời bạn đã liên kết. Cảm ơn! – Ittai

+1

Vì vậy, ban đầu, nó chỉ giúp tách biệt các mối quan tâm - trình tổng hợp chịu trách nhiệm về thứ tự trong đó các mô-đun được xây dựng, phụ huynh là phiên bản phụ thuộc có trách nhiệm và những thứ như chi tiết kết nối scm. – dan

+1

Ngoài ra, tôi đã nhìn thấy những ví dụ mà mọi người đã chia nhỏ pom cha mẹ của họ thành các phần phổ biến, sau đó trở thành cha mẹ cho poms cha mẹ khác. Ví dụ, bạn có một vài dự án sử dụng Hibernate, bạn có thể kéo chuỗi phiên bản đó thành một pom bố mẹ ngủ đông, và sau đó sử dụng nó như là một "siêu cha mẹ" (như nó đã được, tôi vừa tạo cụm từ đó lên) cung cấp cho bạn phiên bản nhất quán của thư viện ngủ đông trên nhiều dự án không được liên kết khác. Nhưng hãy chắc chắn rằng bạn thực sự muốn có cách tiếp cận được chia sẻ đó; bạn đang ghép nối nhiều dự án với nhau mà có thể không được mong muốn. – dan

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