Maven là transitively kéo trong phiên bản 16 của ổi, mặc dù tôi có một <dependencyManagement> phần trong đó xác định phiên bản 18.phiên bản Maven dependencyManagement bỏ qua trong sự phụ thuộc bắc cầu
Bản tóm tắt nhanh chóng:
gwizard-example
phụ thuộc trêngwizard-config
gwizard-config
có bố mẹ,gwizard-parent
gwizard-parent
có <dependencyManagement> trong đó xác định phiên bản 18 của ổi
Rất may đây là một dự án mã nguồn mở, vì vậy bạn sẽ nhìn thấy poms trực tiếp: gwizard-parent, gwizard-config, gwizard-example. Tuy nhiên, đây là các bit quan trọng trong gwizard-parent
:
<properties>
<guava.version>18.0</guava.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
... và không rườm rà phụ thuộc khai báo trong gwizard-ví dụ:
<properties>
<gwizard.version>0.5</gwizard.version>
</properties>
<dependencies>
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-config</artifactId>
<version>${gwizard.version}</version>
</dependency>
</dependencies>
Cây phụ thuộc cho gwizard-config cho thấy ổi 18 một cách chính xác:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-config ---
[INFO] org.gwizard:gwizard-config:jar:0.5
[INFO] +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] | \- com.google.guava:guava:jar:18.0:compile
Tuy nhiên, cây phụ thuộc cho gwizard-ví dụ cho thấy ổi 16 (mà gây ra vấn đề):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-example ---
[INFO] org.gwizard:gwizard-example:jar:1.0-SNAPSHOT
[INFO] +- org.gwizard:gwizard-config:jar:0.5:compile
[INFO] | +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] | | \- com.google.guava:guava:jar:16.0.1:compile
Điều này đang sử dụng Maven v3.2.5. Tôi bối rối. Cứu giúp?
Có thể liên quan: dependencyManagement in parent ignored
CẬP NHẬT: Các poms liên kết trên github đang thay đổi; thêm phụ thuộc vào gwizard-services
(trực tiếp tuyên bố dep ổi) trong số gwizard-example
"đã khắc phục" sự cố. Vẫn còn một số hành vi cơ bản xấu ở đây.
CẬP NHẬT: Tạo this JIRA issue
Điều này không có ý nghĩa; hoặc ít nhất, nó không có vẻ rất hữu ích. Điểm của 'dependencyManagement' là cho phép tôi chỉ định một phiên bản cho các phụ thuộc transitive. Ở đây, ổi đang được kéo quá mức qua guice. Tại sao 'dependencyManagement' của tôi không kiểm soát phiên bản được lấy bởi guice? Tại sao tôi nên chỉ định ổi là phụ thuộc nếu thư viện của tôi không trực tiếp phụ thuộc vào ổi? – stickfigure
Câu trả lời đơn giản cho điều này là, do người duy trì pom của guice đã quyết định sử dụng một phiên bản khác. Vì vậy, bạn không thể trực tiếp kiểm soát pom được sử dụng ở đó. Bạn chỉ có thể kiểm soát nó gián tiếp. BTW: 'dependencyManagement' không kiểm soát. 'phụ thuộc' thay vào đó, làm cho nó gần với dự án của bạn hơn. – khmarbaise