Принудительная повторная загрузка зависимости релиза с помощью Maven

136

Я работаю над проектом с зависимостью X. X, в свою очередь, зависит от Y.

Я имел обыкновение явно включать Y в pom моего проекта. Тем не менее, он не использовался и, чтобы сделать вещи чище, я вместо этого добавил его в pom X в качестве зависимости. X помечен как зависимость выпуска.

Проблема в том, что после удаления Y из pom моего проекта и добавления его в pom X, мой проект не поднимает его mvn -U clean package. Я знаю -U обновить снимки, но не релизы.

Итак, не удаляя каталог ~ / .m2 / repository, как я могу принудительно повторно загрузить pom X? Кроме того, я попытался бежать, dependency:purge-local-repositoryи это тоже не сработало.

volni
источник
Вы пометили вопросы как "maven-2". Опция -U была добавлена ​​в Maven 3 для решения этой проблемы. Я бы предложил обновить.
Марк О'Коннор
С точки зрения методологии, если вы измените Xpom, то он должен представлять собой новый релиз, даже если это только изменение номера патча: 1.3-> 1.3.1. Таким образом, это устранит эту проблему с самого начала.
jpaugh
Тем не менее, все еще возможно иметь подобные проблемы со снимками, так что хорошо иметь некоторые ответы.
jpaugh

Ответы:

166

Вы не можете заставить Maven повторно загружать зависимости, но вместо этого вы можете удалить зависимости, которые были неправильно загружены с помощью mvn dependency:purge-local-repository

Смотрите: http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

Али Токмен
источник
11
Разве это не то же самое?
Свиш
2
Он не требует доступа к файловой системе, что может быть проблемой, если вы только конфигурируете задания сборки (например, для системы CI).
Оливер Дротбом
2
Если запущено несколько проектов mvn dependency:purge-local-repository clean package, возможно, один проект удалит такую ​​же зависимость в локальном репозитории, пока другой проект выполняет компиляцию. Как избежать?
Викид
55

Я просто удалил свой ~ / .m2 / репозиторий, и это привело к повторной загрузке;)

Райан Энгилли
источник
1
Это помогает в крайнем случае, у меня был проект, в котором затмение и maven были немного «запутаны». Простое удаление папки .m2 заставило проект скомпилироваться и работать правильно.
Леонардо
5
Также возможно выборочно удалить зависимости, которые, как вы знаете, необходимо обновить из репозитория. Ручная чистка, если хотите.
jpaugh
41

Я думаю, что следующая команда может помочь вам!


mvn -U clean install
Ричард
источник
4
освободить зависимость с помощью Maven в вопросе. Нет, это мог бы быть лучший комментарий.
Наман
31

Благодаря Али Токмен отвечу. Мне удалось принудительно удалить конкретную локальную зависимость с помощью следующей команды:

mvn dependency:purge-local-repository -DmanualInclude=com.skyfish:utils

При этом он удаляется utilsиз моего .m2 / репозитория и всегда перезагружает utilsзависимость JAR при запуске mvn clean install.

Skyfish
источник
1
Мне просто нужен был способ заставить maven заново загрузить зависимость. Это единственный ответ, который действительно делает это, тогда как другие ответы предлагают удалить все. Спасибо
smac89
14

Проект правой кнопкой мыши -> Maven -> Обновить проект и установите флажки, как на снимке экрана. Это также обновит релизы :)

введите описание изображения здесь

Nanosoft
источник
5
Было бы неплохо узнать, как они реализовали эту часть "/ Releases".
Улисес Лайера
Спасибо за это как раз то, что мне было нужно.
JamesG
12
mvn clean install -U

-U означает принудительное обновление зависимостей.

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

ArpitBora
источник
Опять же, это только перезагружает зависимости SNAPSHOT.
Zardoz89
6

Когда вы добавили его в X, вы должны были увеличить номер версии X, то есть X-1.2.
Затем X-1.2 должен был быть установлен / развернут, и вы должны были изменить зависимость своих проектов от X, чтобы она зависела от новой версии X-1.2.

Краун
источник
6

Если вы знаете идентификатор группы X, вы можете использовать эту команду для повторной загрузки всего Xи его зависимостей

mvn clean dependency:purge-local-repository -DresolutionFuzziness=org.id.of.x

Он делает то же самое, что и другие ответы, которые предлагают использовать dependency:purge-local-repository, но он только удаляет и перезагружает все, что связано с X.

smac89
источник
4

Если вы действительно хотите принудительно загрузить все зависимости, вы можете попытаться повторно инициализировать весь репозиторий maven. Как и в этой статье уже описано, вы можете использовать:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install
Барт ден Хаак
источник
3

Просто удалите ~ / .m2 / repository ..... / actual_path, куда приходит недопустимый LOC, поскольку он заставляет повторно загрузить удаленные файлы JAR. Не удаляйте всю папку репозитория, а удалите конкретную папку, из которой происходит ошибка.

Саурабх Оза
источник
0

Удаление ~/.m2/repositoryрешит вашу проблему. Но, если вам все еще нужно сохранить старое~/.m2/repository вы можете просто временно изменить локальный путь maven.

Если вы работаете с IntelliJ, просто перейдите в настройки Maven и измените путь к локальному репозиторию куда-нибудь еще. Вам может понадобиться поставить галочку рядом с этим.

введите описание изображения здесь

Таринду Сатишхандра
источник
-1

Большинство ответов, представленных выше, решит проблему.

Но если вы используете IntelliJ и хотите, чтобы он просто исправлял вас автоматически, перейдите в Настройки Maven.

Сборка, выполнение, развертывание -> Инструменты сборки -> Maven

введите описание изображения здесь

Отключить работу в автономном режиме

Включить Всегда обновлять снимки (переключаться при необходимости)

Абхишек Нандгаонкар
источник
1
Я был бы признателен, если бы вы также могли поделиться причиной понижения голосов, пока вы на нем. Спасибо.
Абхишек Нандгаонкар
1
Предположительно, потому что снимки не являются релизами, поэтому это не решает проблему.
Сор
-2

Перейти к пути сборки ... удалить существующую библиотеку maven и добавить ... нажать добавить библиотеку ... щелкнуть по управляемым зависимостям maven ... затем щелкнуть настройки проекта maven ... установить флажок разрешить зависимости maven .. он загрузит все maven зависимости

SagaramVijay
источник
2
Это предполагает использование некоторой IDE, предположение, не поддерживаемое вопросом, и вы даже не указали, что такое IDE!
Фил