Зависимость Maven не в pom.xml

У меня есть проект, который использует spring. Он использует версию 3.1.1, но по какой-то причине я действительно не знаю, некоторые артефакты Spring дублируются с двумя разными версиями. Я ищу эти зависимости во всех файлах pom.xml из моего проекта. Я также использую плагин зависимостей, чтобы выяснить, где были включены эти зависимости.

Здесь у вас есть выдержка из вывода mvn dependency:tree

[INFO] |  |  \- org.springframework:spring-web:jar:3.1.1.RELEASE:compile
[INFO] |  |     +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  |     +- org.springframework:spring-beans:jar:3.1.1.RELEASE:compile
[INFO] |  |     +- org.springframework:spring-context:jar:3.1.1.RELEASE:compile
[INFO] |  |     |  +- org.springframework:spring-aop:jar:3.1.1.RELEASE:compile
[INFO] |  |     |  +- org.springframework:spring-expression:jar:3.1.1.RELEASE:compile
[INFO] |  |     |  \- org.springframework:spring-asm:jar:3.0.5.RELEASE:compile
[INFO] |  |     \- org.springframework:spring-core:jar:3.0.5.RELEASE:compile

Насколько я знаю, это означает, что org.springframework:spring-core:jar:3.0.5.RELEASE:compile включено в org.springframework:spring-web:jar:3.1.1.RELEASE:compile.

Я обхожу это, включая зависимость с областью действия provided, но мне нужно знать, почему это происходит.

Обновление: кажется, что когда я комментирую следующий код, банки не включаются в войну.

<dependency>
    <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>${cxf-version}</version>
</dependency>
...
<properties>
    ...
    <cxf-version>2.4.2</cxf-version>
    <spring.version>3.1.1</spring.version>
</properties>

person esauro    schedule 28.01.2014    source источник
comment
Я не могу поверить, что обе версии на самом деле находятся в пути к классам, если это одна и та же зависимость с одним и тем же артефактом и groupId. Maven должен управлять этим и включать только один. Пока все это выглядит как ожидаемое поведение, и вы пытаетесь решить проблему, которая на самом деле не является проблемой.   -  person Gimby    schedule 28.01.2014
comment
Попробуйте mvn dependency:tree -Dverbose, чтобы получить больше информации о том, действительно ли он включен или нет.   -  person Keppil    schedule 28.01.2014


Ответы (2)


spring-context pom определяет зависимость от spring-core с той же версией, что и spring-context.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${project.version}</version>
    <scope>compile</scope>
</dependency>

Таким образом, у вас должен быть dependencyManagement где-то в вашем проекте, который говорит maven использовать 3.0.5.RELEASE вместо 3.1.1.RELEASE.

Взгляните на свои помпоны. Должно быть что-то подобное в файле dependencyManagement.

<dependencyManagement>
    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
</dependencyManagement>

В зависимости от вашей версии maven также может быть возможно, что вы используете импорт зависимостей.

PS: то же самое для spring-asm

person René Link    schedule 28.01.2014
comment
Нет никакого управления зависимостями - person esauro; 28.01.2014

Если я добавлю в проект только org.springframework:spring-web:jar:3.1.1.RELEASE и покажу дерево через mvn dependency:tree, появится следующий вывод:

[INFO] \- org.springframework:spring-web:jar:3.1.1.RELEASE:compile
[INFO]    +- aopalliance:aopalliance:jar:1.0:compile
[INFO]    +- org.springframework:spring-beans:jar:3.1.1.RELEASE:compile
[INFO]    +- org.springframework:spring-context:jar:3.1.1.RELEASE:compile
[INFO]    |  +- org.springframework:spring-aop:jar:3.1.1.RELEASE:compile
[INFO]    |  +- org.springframework:spring-expression:jar:3.1.1.RELEASE:compile
[INFO]    |  \- org.springframework:spring-asm:jar:3.1.1.RELEASE:compile
[INFO]    \- org.springframework:spring-core:jar:3.1.1.RELEASE:compile
[INFO]       \- commons-logging:commons-logging:jar:1.1.1:compile

где никогда не было ссылки на org.springframework:spring-core:jar:3.0.5.RELEASE или org.springframework:spring-asm:jar:3.0.5.RELEASE. Это означает, что у вас есть другая зависимость, которая представляет это, или вы используете блок dependencyManagement, который перезаписывает это.

person khmarbaise    schedule 28.01.2014
comment
Спасибо, я ищу эту зависимость, но я действительно не вижу ее. - person esauro; 28.01.2014