2013-01-14 23 views
8

Powiedz, że mam złożony projekt z wieloma zależnościami. Wersje zależności są zarządzane przez wiele importowanych makiet zakresu. Mój projekt jest zależny od artefaktu group:artifact, który jest zależny od artefaktu group:transitive-dependency. Kiedy uruchamiam dependency:tree widzę coś takiego:Śledzenie zarządzanych wersji zależności w Maven

+- group:artifact:jar:1.3 
    +- group:transitive-dependency:jar:1.1 (version managed from 1.3) 

Problemem jest group:artifact:1.3 wymaga group:transitive-dependency wersji 1.3 lub wyższej. Oczywiście jedna z importowanych poms wymusza złą wersję. Ale czy jest jakiś sposób, by się dowiedzieć, który z nich jest inny, niż przez przeszukiwanie wszystkich?

+0

Czy próbowali uruchomiony 'mvn site' na swoim proejct dominującej i patrząc na' wyjściu convergence' zależność? – Tim

+0

Przejściowa zależność nie pojawia się w raporcie o zależnościach zależności. Nie pokazuje również, gdzie zarządzane są zależności. –

Odpowiedz

5

Powinieneś wypróbować wtyczkę maven-enforcer i skonfigurować ją tak, aby działała DependencyConvergence, np.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
     <execution> 
     <id>enforce</id> 
     <configuration> 
      <rules> 
      <DependencyConvergence/> 
      </rules> 
     </configuration> 
     <goals> 
      <goal>enforce</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

To pokaże Ci, które zależności na najwyższym poziomie mają różne wersje innych zależności w drzewach zależności. Następnie pomijane są warianty zależności, których nie chcesz używać w wykluczeniach.

2

Dzieje się tak, gdy 2 lub więcej Poms rodziców jest w konflikcie z tym samym artefaktem.

Na przykład

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile (version managed from 2.2) [INFO] | +- oro:oro:jar:2.0.8:compile

W moim przypadku ramy-core ma log4jextentsions 2,2 wymienionych. a mój Super pom mówi log4jextentsions 2.3. W jakiś sposób framework-core przekonało maven'a do używania log4jextentsions 2.2.

Później, kiedy aktualizować ramy-core pom używać 2.3,

[INFO] | \- com.rbs.gbm.risk:framework-core:jar:1.6.6:compile [INFO] | +- com.rbos.gbm.risk:log4jextensions:jar:2.3:compile [INFO] | +- oro:oro:jar:2.0.8:compile

Powiązane problemy