2012-11-26 18 views
5

Mam dwie zależności w mojej pom nazwie A i B. Obie A i B mają przejściową zależność od artefaktu C (Kasandra-wszystkie). A i B stosują różne wersje C. Zależność A to artefakt astyanax.

że chce zachować wersja C, który pochodzi z B. że dokonane przez dodanie Wyłączenie w (Astyanax) dla CJak wykluczyć zależność tylko dla określonego zakresu?

Niestety chce zakres B jako „test” . Oznacza to, że z wyłączeniem w A, C nie będzie zawarte poza zakresem testowym.

Jak mogę rozwiązać ten problem? Czy wyłączenie może dotyczyć tylko określonego zakresu? Alternatywnie, czy mogę określić, której wersji użyć dla zależności przechodnich?


Przykład:
Oto co mój pom wygląda następująco:

Artifact A (Astyanax) z wyłączeniem uzależnienia od Artifact C (zwanego Cassandra-all)

<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> 

Konkretnie: w jaki sposób mogę włączyć kasandra - wszystko, gdy uruchamiam kod poza zakresem testowym i nadal utrzymuję zakres testu kassandraunit?

+0

Możliwa duplikat [Wykluczenie maven zależność dla testów] (https://stackoverflow.com/questions/12053316/exclude-maven-dependency-for-tests) – Andremoniy

Odpowiedz

4

przepraszam, jeśli moje pytanie nie było tak oczywiste, jak to mogło być. Sposób, w jaki rozwiązano to nie było trudno w ogóle:

  • Dodałem oddzielny zależność dla C w moim pom
  • Ciągle wykluczenia C w

Konkretnie tutaj, po prostu dodano:

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

oraz następującą zależność, której brakowało w czasie wykonywania.

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

Nie jestem pewien, czy wszystko zrozumiałem, ale w każdym przypadku powinieneś być w stanie to osiągnąć dzięki profilom.

W swojej pom utwórz profil A, w którym znajdziecie Państwo zależnościach A z wyłączeniem B i profil B, w której masz zależność z wyłączeniem A.

Na starcie, w zależności od profilu, który wybrałeś, uwzględnisz jeden lub drugi.

HIH

0

więc konkretnie: w jaki sposób mogę to Cassandra-all, kiedy uruchomienie kodu poza zakresem testowym i nadal zachować zakres jedynego testu cassandraunit?

Use Maven POM to configure surefire-maven-plugin i change your classpath.

Jeśli to, co chcesz, jest jedynie, że zależność cassandra-all być usunięte ze ścieżki klasy podczas wykonywania swoich badań, a następnie po POM fragment uniemożliwiłoby trudne:

<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> 
Powiązane problemy