Проблема с classpath при использовании Ivy

Я использую Ivy для управления своими зависимостями, и это вызывает у меня проблемы с easymock

мой файл ivy.xml имеет следующее:

 <dependency org="easymock" name="easymock" rev="2.5.+" conf="compile,test -> default" />

а затем я следую другим зависимостям библиотеки, надеясь, что в случае, если какая-то другая библиотека использует другую версию easymock, по крайней мере, моя библиотека получит правильную.

но затем, после того, как я решу, в eclipse я вижу, что есть 2 версии easymock (1.2 и 2.5), а затем 1.2 указан первым.

и когда я запускаю свой модульный тест, я получаю java.lang.NoSuchMethodError в конструкторе org.easymock.internal.RecordState, который принимает org.easymock.internal.IMocksBehavior.

что предполагает, что я использую старую версию EasyMock.

Любые идеи, как я могу обойти эту проблему?


person Charbel    schedule 15.02.2011    source источник


Ответы (2)


Создайте отчет о зависимостях ivy, чтобы точно увидеть, какие версии использует ivy для каждой конфигурации:

  <ivy:resolve/>
  <ivy:report todir='${ivy.reports}' graph='false' xml='false'/>

Обычно, когда ivy сталкивается с двумя версиями одной и той же библиотеки, старая версия «вытесняется».

Чтобы исправить проблемы с неправильным разрешением конфликтов, я бы посоветовал прочитать doco< /а>

Обновлять

Алгоритмы конфликта Ivy всегда хорошо работали для меня в прошлом, но я должен признать, что никогда полностью не понимал некоторые сложности транзитивного анализа. Стоит прочитать следующую статью Maven:

http://guntherpopp.blogspot.com/2011/02/understanding-maven-dependency.html

person Mark O'Connor    schedule 15.02.2011

Последний easymock, который я вижу в зеркалах ibiblio, — это версия 2.0. Это будет означать, что версия 2.5 не найдена и используется более старая версия. Проверьте настройки и версии вашего резолвера. Это также помогает время от времени очищать кеш (ivy:cleancache), поэтому ivy вынужден искать ревизии в репозиториях.

person Jan Galinski    schedule 24.02.2011
comment
Я не использую ibiblio, я использую общий репозиторий внутренней сети. - person Charbel; 24.02.2011
comment
Я вижу обе версии, и Айви замещает новую старую, а должна была делать прямо противоположное. Обходной путь, который я нашел, состоит в том, чтобы перезаписать в локальном кеше плюща старую версию копией нового файла jar. (что-то вроде cp xxx.{new-version}.jar xxx.{old-version}.jar), очень вонючий, но работает - person Charbel; 24.02.2011