2012-02-02 36 views
21

Tôi đang thực hiện một số kịch bản và tôi cần có danh sách tất cả các poms cha mẹ cho bất kỳ pom nhất định nào. Plugin phụ thuộc dường như chỉ quan tâm đến các phụ thuộc được liệt kê trong phần phụ thuộc của pom, nhưng dường như không có cách nào để hiển thị các poms cha, cũng là các phụ thuộc bắt buộc để Maven hoạt động.Làm cách nào để hiển thị cấu trúc phân cấp Maven POM?

Tôi có thiếu cái gì cơ bản không?

Trả lời

22

Không có lệnh Maven đơn giản nào sẽ hiển thị cho bạn chuỗi chuỗi POM cha mẹ cho tệp pom.xml. Lý do cho điều này là nó không phải là một câu hỏi phổ biến mà người ta thường hỏi (nhiều hơn về điều đó bên dưới). Đối với kịch bản lệnh của bạn, bạn sẽ phải phân tích cú pháp tệp pom.xml, nhận tọa độ tạo tác gốc, nhận một tệp pom.xml của tệp phần mềm và sau đó phân tích cú pháp tệp pom.xml (và lặp lại). Xin lỗi, nhưng tôi không biết, nhưng .

Bạn đúng rằng về mặt kỹ thuật pom mẹ là phụ thuộc của dự án của bạn, nhưng nó không phải là Phụ thuộc Maven theo nghĩa đen và được xử lý hoàn toàn khác. Chuỗi các poms cha mẹ, cùng với các cấu hình hoạt động, tập tin settings.xml của bạn, và maven siêu pom từ thư mục cài đặt tất cả được kết hợp với nhau để tạo ra hiệu quả của dự án của bạn. POM hiệu quả là những gì Maven thực sự sử dụng để thực hiện công việc của mình. Vì vậy, về cơ bản, chuỗi thừa kế pom cha mẹ đã được giải quyết và kết hợp trước khi plugin phụ thuộc (hoặc bất kỳ plugin nào khác) thậm chí được kích hoạt.

Câu hỏi mà hầu hết mọi người thường hỏi là 'pom.xml REAL của tôi là gì thực sự giống như khi Maven được kết hợp mọi thứ?' hoặc 'Kết quả chuỗi thừa kế của cha mẹ tôi là gì?' hoặc 'Thuộc tính pom.xml của tôi bị ảnh hưởng bởi cấu hình hoạt động như thế nào?' Pom hiệu quả sẽ cho bạn biết tất cả điều này.

Tôi biết bạn đã không hỏi, nhưng đối với những người khác đọc điều này, nếu bạn muốn xem tệp pom.xml gốc của bạn, chỉ cần mở tệp pom.xml trong trình soạn thảo M2Eclipse POM và nhấp vào liên kết tạo tác gốc trên tab tổng quan. Bằng cách này, bạn có thể nhanh chóng di chuyển chuỗi các tệp pom.xml chỉ bằng một cú nhấp chuột trên mỗi pom. Nó sẽ là một dự án kỳ lạ có hơn 3 hoặc 4 poms cha mẹ thừa kế.

Nếu bạn muốn xem pom hiệu quả của mình, bạn có thể chạy lệnh mvn help:effective-pom. Ngoài ra, bạn có thể nhấp vào tab POM hiệu quả trong trình soạn thảo POM của M2Eclipse.

+0

Great câu trả lời, cảm ơn! Nhìn thấy không có phản ứng trong những ngày sau khi gửi câu hỏi, tôi đã viết một java util để cung cấp cho tôi thông tin bằng cách sử dụng thư viện 'maven-model' của Maven. Đối tượng Model (một cá thể POM) có phương thức getParent() cho phép tôi đệ quy đọc lên cây. – Todd

7

giải pháp cơ bản

mvn dependency:display-ancestors

Sẽ hiển thị các bậc phụ huynh như thế này:

[INFO] Ancestor POMs: org.springframework.boot:spring-boot-starter-parent:1.4.0.RELEASE <- org.springframework.boot:spring-boot-dependencies:1.4.0.RELEASE

nó đòi hỏi ở phiên bản 2.9+ của plugin phụ thuộc.Nếu plugin của bạn là cũ và vì lý do nào bạn không thể cập nhật sau đó gọi:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.9:display-ancestors 

Cải thiện giải pháp

Các hệ thống cấp bậc-maven-plugin (mà tôi đã viết) có thể hiển thị thêm thông tin về poms nhập khẩu như thế này:

[INFO] Displaying hierarchy. Set level=full to display dependencies in dependencyManagement 
[INFO] PARENT org.springframework.boot:spring-boot-samples:1.4.1.BUILD-SNAPSHOT 
[INFO] PARENT org.springframework.boot:spring-boot-starter-parent:1.4.1.BUILD-SNAPSHOT 
[INFO]  PARENT org.springframework.boot:spring-boot-dependencies:1.4.1.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework:spring-framework-bom:4.3.3.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework.data:spring-data-releasetrain:Hopper-BUILD-SNAPSHOT 
[INFO]   PARENT org.springframework.data.build:spring-data-build:1.8.4.BUILD-SNAPSHOT 
[INFO]  IMPORT org.springframework.integration:spring-integration-bom:4.3.1.RELEASE 
[INFO]  IMPORT org.springframework.security:spring-security-bom:4.1.3.RELEASE 

chi tiết đang ở đây: https://github.com/ExampleDriven/hierarchy-maven-plugin

+1

Lưu ý rằng bạn cần ít nhất là v2.9 của plugin phụ thuộc cho báo cáo đó để có sẵn: https://maven.apache.org/plugins/maven-dependency-plugin/display-ancestors-mojo.html – mac

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