Maven застрял на старой версии системной зависимости - PullRequest
4 голосов
/ 05 декабря 2009

Мой проект Maven зависит от не-Maven библиотеки, которая закодирована как системная зависимость:

<dependency>
  <groupId>com.example</groupId>
  <artifactId>foo</artifactId>
  <version>${foo.version}</version>
  <scope>system</scope>
  <systemPath>${foo.jar}</systemPath>
</dependency>

, где расположение библиотеки можно контролировать с помощью локальных свойств:

<properties>
  <foo.version>2.1.1</foo.version>
  <foo.basedir>/usr/local</foo.basedir>
  <foo.libdir>${foo.basedir}/lib</foo.libdir>
  <foo.jar>${foo.basedir}/java/foo-${foo.version}.jar</foo.jar>
</properties>

Недавно библиотека перешла с версии 2.1.1 на версию 2.2.0, поэтому я изменил свойство foo.version, но Maven, похоже, застрял на старой версии:

...
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Missing:
----------
1) com.example:foo:jar:2.1.1
...

Я бегал mvn dependency:purge-local-repository (на самом деле много раз). Строка 2.1.1 не отображается нигде в моем POM, profiles.xml или settings.xml. Тем не менее, каждый раз, когда я пытаюсь построить свой проект, Maven терпит неудачу с вышеуказанной ошибкой.

Что здесь происходит? Где Maven хранит информацию о версии зависимости и как ее обновить?

Ответы [ 3 ]

2 голосов
/ 05 декабря 2009

Я думаю, что ${foo.version} может быть разрешено как свойство фильтра. Можете ли вы проверить файл свойств в src/main/filters.

Не уверен, что это действительно проблема, но просто попробуйте и обновите обратно.

Другая причина, о которой я мог подумать - это может быть транзитивная зависимость от com.example:foo:jar:2.1.1. Это еще одна зависимость, для которой требуется версия 2.1.1 этого артефакта. Вы можете найти, какой артефакт приносит это транзитивно, выполнив mvn dependency:tree

0 голосов
/ 10 августа 2013

Конфликт версий зависимостей является очень распространенной проблемой, и большую часть времени, когда мы начинаем создавать наше приложение, мы никогда не фокусируемся или вообще забываем об этом аспекте до тех пор, пока наше приложение не начнет вести себя неожиданным образом или не запустит какое-то исключение.

Для читателей и посетителей SO, которым интересно знать причину возникновения конфликтов зависимостей и то, как мы можем их избежать в нашем приложении, я нашел источник, объясненный здесь точным образом, поэтому я подумал о том, чтобы добавить свои 2 бита к это.

http://techidiocy.com/maven-dependency-version-conflict-problem-and-resolution/

Приветствия

0 голосов
/ 06 декабря 2009

Вы знаете что. Видя обходной путь, найденный @Chris Conway, я думаю, что это можно было бы «решить», просто запустив mvn clean.

И даже если бы здесь это не помогло, всегда стоит попробовать mvn clean, когда происходит что-то странное.

...