2012-06-21 24 views
33

Tình hình là, tôi có hai dự án multimodule Maven với cấu trúc giống nhau:Thứ tự xây dựng của dự án đa mô-đun Maven?

 
Parent 
    - Module 1 
    - Module 2 

Khi tôi xây dựng dự án 1, tôi thấy rằng cha mẹ được xây dựng đầu tiên (thứ tự là huynh> module1-> module2) . Tuy nhiên đối với dự án 2, phụ huynh được xây dựng cuối cùng (thứ tự là module1-> module2-> cha mẹ). Tại sao hai dự án lại có các lệnh xây dựng khác nhau? Hơn nữa, làm thế nào tôi có thể tự kiểm soát thứ tự xây dựng?

Cập nhật 1:
Cả hai dự án cha mẹ là những dự án POM đơn giản mà không cần mã nguồn, vì vậy tôi không thể giải thích trật tự xây dựng theo đồ thị phụ thuộc.

Cập nhật 2:
Các POMs mẹ đều giống nhau, ngoại trừ tên GAV và module con:

 
<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>parent-group-id</groupId> 
    <artifactId>parent-artifact-id</artifactId> 
    <version>parent-version</version> 
    <packaging>pom</packaging> 
    <name>parent-name</name> 
    <modules> 
     <module>module-1</module> 
     <module>module-2</module> 
    </modules> 
</project> 
+0

Bản sao có thể có của [Đặt lệnh xây dựng cho nhiều dự án trong Maven] (http://stackoverflow.com/questions/6593503/impose-build-order-for-a-multi-project-in-maven) – nullpointer

Trả lời

24

Việc xây dựng trật tự được xác định bởi các lò phản ứng Maven mà là một cơ chế tự động đảm bảo đúng build để xây dựng các mô-đun đa cấp bằng cách phân loại các dự án.

Xem the official documentation để biết cách hoạt động.

Nó nói:

Các mối quan hệ sau đây được vinh danh khi sắp xếp các dự án:

  • một sự phụ thuộc dự án trên mô-đun khác trong xây dựng
  • một tuyên bố Plugin nơi các plugin là một module trong phần xây dựng
  • sự phụ thuộc vào plugin trên một mô-đun khác trong tòa nhà
  • mở rộng bản dựng khai ion trên một mô-đun trong xây dựng
  • thứ tự khai báo trong phần tử (nếu không có quy tắc khác áp dụng)

Bạn không thể tự kiểm soát trật tự xây dựng. Nếu bạn muốn thay đổi thứ tự bạn phải thực hiện thay đổi cho dự án của bạn có ảnh hưởng đến thứ tự sắp xếp lò phản ứng.

+0

Nhưng điều này không giải thích tại sao hai dự án lại có các lệnh xây dựng khác nhau. –

+1

Bạn có thể chia sẻ poms của mình không? –

+0

Vui lòng xem cập nhật 2. –

9

Ở mức cao, thứ tự xây dựng dựa trên biểu đồ topological sort của biểu đồ phụ thuộc của mô-đun.

EDIT: Câu hỏi dành cho bạn. Tôi hiểu rằng dự án 1 có chứa hai mô-đun và do đó, không dự án 2. Nhưng làm các mô-đun trong dự án 2 tuyên bố rõ ràng "cha mẹ" pom là cha mẹ? Tôi nghĩ rằng có lẽ dự án của bạn 1 mô-đun rõ ràng tuyên bố pom cha mẹ, và các mô-đun dự án 2 không. Điều đó có nghĩa là dự án 2 "cha mẹ" không thực sự là một phụ huynh ở tất cả và do đó không phải được xây dựng trước khi các mô-đun. Đó là phỏng đoán của tôi.

+0

Nhưng cả hai dự án mẹ đều là các dự án POM đơn giản mà không có bất kỳ mã nguồn nào. Biểu đồ phụ thuộc không có ý nghĩa ở đây. –

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