Управление зависимостями с Maven 2 - PullRequest
3 голосов
/ 02 сентября 2010

У меня есть веб-приложение, содержащее более 100 файлов jar, перетаскиваемых Maven, и все вышло из-под контроля.

Например, я закончил с 3 версиями базовых классов Spring, что иногда приводило к сбою развертывания приложения (кажется, что порядок загрузки jar-файлов из WEB-INF / lib не всегда совпадает с Weblogic): *

spring-2.5.6.SEC01.jar
spring-2.5.6.A.jar
spring-core-2.0.8.jar

Так что я пытаюсь навести порядок. Я начал использовать в основном исключения, но мне интересно, не стоит ли вместо этого полагаться на элемент dependencyManagement в моих собственных файлах pom. Какова лучшая практика в этом отношении?

Кроме того, версия транзитивных зависимостей часто не указывается. Например, в файле Spring-security-core 2.0.5.RELEASE есть:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
</dependency>

Какая версия spring-core будет загружена, если я ничего не укажу? Последние доступны? Будет ли он меняться со временем?

Спасибо.

1 Ответ

3 голосов
/ 03 сентября 2010

Так что я пытаюсь навести порядок.Я начал использовать в основном исключения, но мне интересно, не стоит ли вместо этого полагаться на элемент dependencyManagement в моих собственных файлах pom.Какова лучшая практика в этом отношении?

  • Вам определенно следует использовать элемент dependencyManagement для управления версиями артефактов в транзитивных зависимостях, это путь.
  • Вы также можете создавать POM для групповых зависимостей .
  • Использовать excludes, когда groupId или artifactId не совпадают (например, spring-core имонолитный spring jar).

Кроме того, версия переходных зависимостей часто не указывается (...).Какая версия Spring-Core будет загружена, если я ничего не укажу?Последние доступны?Будет ли оно меняться со временем?

Они определены , они объявлены в разделе dependencyManagement spring-security-parent POM.Версия 2.0.8.Это не изменится со временем для этого выпущенного артефакта.

И если вы хотите контролировать версию этой переходной зависимости, используйте элемент dependencyManagement, как я написал.

И не забудьте mvn dependency:tree (или любой графический интерфейс), это ваше лучшее оружие здесь.

...