Принудительная повторная загрузка зависимости релиза с помощью 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и это тоже не сработало.


Вы пометили вопросы как "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.


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

14

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

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


5
Было бы неплохо узнать, как они реализовали эту часть "/ Releases".
— Улисес Лайера

Спасибо за это как раз то, что мне было нужно.
— JamesG

12
mvn clean install -U

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

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


Опять же, это только перезагружает зависимости 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.


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 зависимости


2
Это предполагает использование некоторой IDE, предположение, не поддерживаемое вопросом, и вы даже не указали, что такое IDE!
— Фил
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.