2012-02-02 28 views
12

Tôi có một truy vấn về loại trừ phụ thuộc maven. Hãy xem xét những điều sau đâyKhông bao gồm phụ thuộc Maven

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-taglibs</artifactId> 
     <version>${spring-security.version}</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.security</groupId> 
       <artifactId>spring-security-web</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.1.0.RELEASE</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-web</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>3.1.0.RELEASE</version> 
    </dependency> 
    <dependency> 

Tôi đang cố gắng chuyển đổi từ mùa xuân 3.0.6 xuống 3.1.0. Bảo mật mùa xuân 3.1.0 có sự phụ thuộc vào phiên bản web-bảo mật-mùa xuân 3.0.6, do đó có sự phụ thuộc vào spring-web 3.0.6. Tôi cần phải mang tất cả đến 3.1.0. Vì vậy, tôi loại trừ spring-security-web khỏi bảo mật Spring, có một sự phụ thuộc riêng biệt cho Spring-security-web 3.1.0 mà lần lượt loại trừ phiên bản Spring-web 3.0.6 và tôi cung cấp một phiên bản 3.1.0 mùa xuân-web riêng biệt. Công việc này nhưng tôi cảm thấy sẽ có một cách tiếp cận dễ dàng hơn nhiều. Tôi đã thử đặt một loại trừ cho web mùa xuân dưới bảo mật mùa xuân nhưng nó không hoạt động. Hãy giúp tôi .

Trả lời

18

Bạn có thể sử dụng dependency management mechanism.

Nếu bạn tạo mục nhập trong phần phụ thuộc < phụ thuộcQuản lý > của pom của bạn cho spring-security-web và spring-web với phiên bản 3.1.0 mong muốn, phiên bản được quản lý của tạo tác sẽ ghi đè các mục được chỉ định trong cây phụ thuộc chuyển tiếp .

Tôi không chắc liệu điều đó có thực sự giúp bạn tiết kiệm bất kỳ mã nào hay không, nhưng đó là giải pháp IMO sạch hơn.

+0

Tôi sẽ phải thực hiện việc này ngay bây giờ. Tôi hy vọng loại trừ toàn cầu có thể làm cho nó dễ dàng hơn .. –

8

trừ toàn cầu look like they're being worked on, nhưng cho đến lúc đó ...

Từ Sonatype maven reference (cuối trang):

quản lý phụ thuộc trong một POM cấp cao nhất khác với chỉ xác định một sự phụ thuộc trên POM được chia sẻ rộng rãi. Để bắt đầu, tất cả các phụ thuộc được thừa hưởng. Nếu mysql-connector-java được liệt kê là phụ thuộc của dự án cấp cao nhất, mỗi dự án trong cấu trúc phân cấp sẽ có tham chiếu đến sự phụ thuộc này. Thay vì thêm vào các phụ thuộc không cần thiết, sử dụng dependencyManagement cho phép bạn củng cố và tập trung quản lý phụ thuộc các phiên bản mà không thêm phụ thuộc được thừa hưởng bởi tất cả trẻ em. Nói cách khác, phần tử dependencyManagement là tương đương với biến môi trường cho phép bạn khai báo phụ thuộc ở bất kỳ đâu bên dưới dự án mà không chỉ định số phiên bản .

Như một ví dụ:

<dependencies> 
    <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <version>3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>3.0.5.RELEASE</version> 
    </dependency> 
    </dependencies> 
    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <exclusions> 
      <exclusion> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
     </dependency> 
     <dependency> 
     <groupId>commons-httpclient</groupId> 
     <artifactId>commons-httpclient</artifactId> 
     <exclusions> 
      <exclusion> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      </exclusion> 
     </exclusions> 
     </dependency> 
    </dependencies> 
    </dependencyManagement> 

Nó không làm cho đoạn code ít tiết tổng thể, nhưng nó không làm cho nó ít tiết nơi mà nó đếm. Nếu bạn vẫn muốn nó ít tiết, bạn có thể follow these tips cũng từ tham chiếu Sonatype.

+0

Cảm ơn vì điều này. 1 cho điều loại trừ và tham chiếu toàn cầu. –

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