2012-11-26 37 views
5

Tôi có hai phụ thuộc trong pom của tôi được gọi là A và B. Cả A và B có sự phụ thuộc chuyển tiếp trên một tạo phẩm C (cassandra-all). A và B sử dụng các phiên bản khác biệt của C. Phụ thuộc A là tạo phẩm astyanax.

Tôi muốn giữ Version của C mà đi kèm với B. Tôi thực hiện bằng cách thêm một loại trừ trong A (Astyanax) cho C.Làm cách nào để loại trừ sự phụ thuộc cho một phạm vi cụ thể?

Thật không may, tôi muốn phạm vi của B là 'test' . Điều này có nghĩa rằng với việc loại trừ trong A, C sẽ không được đưa vào bên ngoài phạm vi kiểm tra.

Tôi làm cách nào để giải quyết vấn đề này? Có thể loại trừ một phạm vi cụ thể không? Ngoài ra, tôi có thể chỉ định phiên bản nào sẽ sử dụng cho phụ thuộc chuyển tiếp không?


Ví dụ:
Đây là những gì pom của tôi trông giống như:

Artifact A (astyanax) với loại trừ sự phụ thuộc vào Artifact C (gọi tắt là cassandra-tất cả)

<dependency> 
     <groupId>com.netflix.astyanax</groupId> 
     <artifactId>astyanax</artifactId> 
     <version>1.0.4</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.apache.cassandra</groupId> 
       <artifactId>cassandra-all</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.cassandraunit</groupId> 
     <artifactId>cassandra-unit</artifactId> 
     <version>1.1.1.1</version> 
     <scope>test</scope> 
    </dependency> 

Vì vậy, cụ thể: làm thế nào tôi có thể bao gồm cassandra-tất cả khi tôi chạy mã bên ngoài phạm vi kiểm tra và vẫn giữ phạm vi kiểm tra cassandraunit chỉ?

+0

có thể trùng lặp của [Loại trừ phụ thuộc maven để thử nghiệm] (https://stackoverflow.com/questions/12053316/exclude-maven-dependency-for-tests) – Andremoniy

Trả lời

4

Tôi xin lỗi nếu câu hỏi của tôi là không rõ ràng như nó có thể có được. Con đường tôi giải quyết này là không khó chút nào:

  • Tôi đã thêm một sự phụ thuộc riêng cho C trong pom tôi
  • tôi vẫn tiếp tục loại trừ C A

Cụ thể ở đây, tôi chỉ đã thêm:

<dependency> 
     <groupId>org.apache.cassandra</groupId> 
     <artifactId>cassandra-all</artifactId> 
     <version>1.1.5</version> 
    </dependency> 

và cũng phụ thuộc sau bị thiếu trong thời gian chạy khác.

<dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.6</version> 
    </dependency> 
0

Tôi không chắc mình đã hiểu mọi thứ, nhưng, trong mọi trường hợp, bạn sẽ có thể đạt được điều này với hồ sơ.

Trong pom của bạn, tạo ra một hồ sơ cá nhân Một trong đó bạn thêm sự phụ thuộc của bạn A với loại trừ B và một hồ sơ B trong đó bạn sẽ có một sự phụ thuộc với loại trừ A.

On runtime, tùy thuộc vào của tiểu sử mà bạn đã chọn, bạn sẽ bao gồm một hoặc người khác.

HIH

0

Vì vậy, cụ thể là: làm thế nào tôi có thể bao gồm cassandra-tất cả khi tôi chạy mã bên ngoài phạm vi kiểm tra và vẫn giữ phạm vi của chỉ kiểm tra cassandraunit?

Use Maven POM to configure surefire-maven-pluginchange your classpath.

Nếu những gì bạn muốn duy nhất là sự phụ thuộc cassandra-all được gỡ bỏ từ classpath trong khi chạy thử nghiệm của bạn, sau đó đoạn POM sau đây sẽ làm cho khó khăn:

<build> 
    <!-- ... --> 

    <plugins> 
    <!-- ... --> 

    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <configuration> 
     <classpathDependencyExcludes> 
      <classpathDependencyExcludes> 
      org.apache.cassandra:cassandra-all 
      </classpathDependencyExcludes> 
     </classpathDependencyExcludes> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 
Các vấn đề liên quan