2010-09-02 4 views
3

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

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

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

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

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

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

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

Спасибо.

ответ

3

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

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

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

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

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

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

+0

Очень полный и полезный ответ. Я уже использовал визуальную зависимость: дерево в eclipse, которое помогло мне выявить проблемы, но я больше задавался вопросом, как это исправить. Большое спасибо. – Damien

+0

@Damien Добро пожаловать. –

Смежные вопросы