2015-04-06 20 views
22

Gần đây tôi đã làm việc về một số cải tiến trong dự án đã phát triển một số thời gian trước đây và đó là những gì tôi đã tìm thấy. Rất nhiều phụ thuộc trong các tệp pom không có phiên bản được chỉ định và chúng được giải quyết. Dự án bao gồm 1 mô-đun gốc và 2 mô-đun con. Mẫu tổng hợp được sử dụng, có nghĩa là không có phần phụ thuộc quản lý. Dự án trên chỉ đơn giản là tổng hợp 2 mô-đun và đó là tất cả. Tiểu dự án không đề cập đến nó như một phụ huynh. Họ có một phụ huynh khác. Những gì tôi không thể nắm bắt được là không phải tiểu dự án cũng không phải cha mẹ của họ (như là một vấn đề của thực tế, nó không có dependencyManagement hoặc là) xác định các phiên bản cho một số phụ thuộc. Ví dụ:phụ thuộc maven không có phiên bản

<dependency> 
    <groupId>javax.mail</groupId> 
    <artifactId>javax.mail-api</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>javax.mail</artifactId> 
</dependency> 
<dependency> 
    <groupId>com.sun.mail</groupId> 
    <artifactId>imap</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jul-to-slf4j</artifactId> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
</dependency> 

Ai đó có thể giúp tôi tìm ra điều này không? Có vẻ như maven xử lý phiên bản với một số chiến lược mặc định.

+0

bạn có thể hiển thị đầu ra 'mvn -version' để chắc chắn không? –

+2

Nó không thể cho maven làm việc mà không xác định các phiên bản của các hiện vật. Chúng phải được định nghĩa ở đâu đó trong thẻ 'dependencyManagement' hoặc trong submodule hoặc parent. Vui lòng kiểm tra hệ thống phân cấp pom của bạn. Sử dụng trợ giúp mvn: effective-pom – Ozgen

+1

Bạn đã kiểm tra qua 'mvn help: effective-pom -Doutput = result.xml' và kiểm tra xem không có dependencyManagement. – khmarbaise

Trả lời

18

Ok, tôi nghĩ mình sẽ tự mình trả lời. Tất nhiên tôi đã xem xét sự phụ thuộc: cây, nhưng tất cả các phụ thuộc mà tôi đã đề cập nơi các thành viên cấp một của cây. Những gì tôi không chú ý ngay lập tức, là dependencyManagement là không có mặt trong các phụ huynh, nhưng nó là tuy nhiên hiện diện trong các môđun con, và những gì là thú vị hơn nó chứa:

 <dependency> 
      <groupId>io.spring.platform</groupId> 
      <artifactId>platform-bom</artifactId> 
      <version>1.0.2.RELEASE</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 

Tôi chưa bao giờ sử dụng Spring IO vBulletin trước đây, vì vậy đây là một khái niệm hoàn toàn mới đối với tôi. Khi nó quay ra nền tảng bao gồm một số phụ thuộc được định cấu hình sẵn: http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions

+1

Đây không phải là Spring liên quan nhưng mẫu BOM "bill of Materials" của maven, được sử dụng để xác định các phụ thuộc cần thiết để sử dụng một số thư viện. Xem [Cơ chế phụ thuộc Maven] (https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html) – estani

13

Không thể để maven hoạt động mà không xác định phiên bản của các hiện vật. Chúng phải được định nghĩa ở đâu đó trong thẻ dependencyManagement hoặc trong submodule hoặc parent. Vui lòng kiểm tra hệ thống phân cấp pom của bạn. Sử dụng mvn help:effective-pom trong thư mục con của dự án. Ngoài ra, bạn có thể sử dụng mvn dependency:tree để tìm ra các tạo phẩm nào - cùng với thông tin tạo tác đầy đủ bao gồm số phiên bản - được giải quyết trong kết quả quản lý phụ thuộc.

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