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

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

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

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

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


person volni    schedule 31.10.2011    source источник
comment
Вы отметили вопросы как maven-2. Параметр -U был добавлен в Maven 3 для решения этой проблемы. Предлагаю обновить.   -  person Mark O'Connor    schedule 01.11.2011
comment
С точки зрения методологии, если вы измените pom X, он должен составить новый выпуск, даже если это всего лишь изменение номера патча: 1.3 - ›1.3.1. Таким образом, это сразу устранило бы эту проблему.   -  person jpaugh    schedule 27.07.2016
comment
Тем не менее, аналогичные проблемы могут возникать и со снимками, поэтому неплохо получить ответы на некоторые вопросы.   -  person jpaugh    schedule 27.07.2016
comment
В качестве ориентира -U действительно влияет на выпущенные версии, но только путем их загрузки, если они никогда ранее не загружались успешно. Странная смесь. stackoverflow.com/questions/29020716/   -  person rogerdpack    schedule 21.04.2021
comment
dependency:purge-local-repository должно работать, не удаляет ли?   -  person rogerdpack    schedule 21.04.2021
comment
Чтобы прояснить вопрос, должно быть явное указание на то, что задействовано 3 проекта, а не 2: я работаю над проектом Z с зависимостью от X, и я переместил зависимость от Y из проекта Z в проект X.   -  person Lu55    schedule 30.06.2021


Ответы (13)


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

См .: http://maven.apache.org/plugins/maven-dependency-plugin/purge-local-repository-mojo.html

Это ищет список всех транзитивных зависимостей текущего проекта, удаляет их, а затем повторно загружает их. Вы даже можете добавить его как плагин в свой pom, если хотите запускать его с каждой сборкой.

person Ali Tokmen    schedule 24.12.2011
comment
Разве это не то же самое? - person Svish; 18.03.2013
comment
Для этого не требуется доступ к файловой системе, что может быть проблемой, если вы настраиваете только задания сборки (например, для системы CI). - person Oliver Drotbohm; 09.10.2014
comment
Если несколько проектов выполняются mvn dependency:purge-local-repository clean package, один проект может удалить ту же зависимость в локальном репозитории, пока другой проект выполняет компиляцию. Как избежать? - person vikyd; 17.11.2017
comment
@vikyd, не уверен, что это лучший способ, но вы можете использовать переменную среды MAVEN_OPTS, чтобы заставить maven загружать / использовать зависимости из другой папки из стандартного местоположения .m2/respository, например: export MAVEN_OPTS="-Dmaven.repo.local=${PROJECT_DIR}/maven.repository Это предотвратит использование maven каких-либо зависимостей в обычной папке и используйте вместо нее папку, указанную Dmaven.repo.local=. - person Anomalyzero; 04.05.2021

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

person Ryan Angilly    schedule 13.08.2013
comment
Это помогает в крайнем случае, у меня был проект, в котором eclipse и maven были немного запутаны. Простое удаление папки .m2 привело к правильной компиляции и запуску проекта. - person Leonardo; 28.04.2014
comment
Также можно выборочно удалить зависимости, которые, как вы знаете, необходимо обновить, из репозитория. Ручная чистка, если хотите. - person jpaugh; 27.07.2016

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

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

При этом он удаляет utils из моего репозитория .m2 / и всегда повторно загружает зависимость utils JAR, когда я перехожу к запуску mvn clean install. Если вы хотите что-то более программное, возможно, также посмотрите параметр -Dinclude=....

person skyfish    schedule 17.05.2016
comment
Мне просто нужен был способ заставить maven повторно загрузить зависимость. Это единственный ответ, который действительно делает это, тогда как другие ответы предлагают удалить все. Спасибо - person smac89; 30.04.2018

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


mvn -U clean install
person Richard    schedule 29.10.2015
comment
освободить зависимость с использованием Maven в вопросе. Нет, это могло быть лучше комментарием. - person Naman; 15.12.2016

mvn clean install -U

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

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

person ArpitBora    schedule 02.08.2016
comment
Опять же, при этом повторно загружаются только зависимости SNAPSHOT. - person Zardoz89; 27.03.2020

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

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

person nanosoft    schedule 14.04.2015
comment
Было бы неплохо узнать, как они реализовали эту часть / Releases. - person Ulises Layera; 12.10.2017
comment
Спасибо за то, что мне было нужно. - person JamesG; 07.12.2017
comment
Это Netbeans? Тем не менее, я предполагаю, что этот флажок означает предоставление команды -U для maven, и какие обновления выпускают stackoverflow.com/a/29020990/ 32453, но не так, как искал ОП :) - person rogerdpack; 21.04.2021

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

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

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

person smac89    schedule 21.08.2018

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

person crowne    schedule 31.10.2011

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

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install
person Bart den Haak    schedule 27.02.2014

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

person Saurabh Oza    schedule 18.09.2018

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

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

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

person Tharindu Sathischandra    schedule 18.05.2020
comment
Пожалуйста, прочтите вопрос: Итак, не удаляя каталог ~ / .m2 / repository ..... - person chokdee; 03.05.2021

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

person SagaramVijay    schedule 08.11.2016
comment
Это предполагает использование некоторой IDE, предположение, не подтверждаемое вопросом, и вы даже не указали, какую IDE! - person Phil; 04.04.2017

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

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

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

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

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

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

person Caffeinated Coder    schedule 11.01.2018
comment
Буду признателен, если вы также расскажете о причине отрицательного голоса, пока вы на нем. Спасибо. - person Caffeinated Coder; 19.12.2018
comment
Предположительно, поскольку снимки не являются релизами, это не решает проблему. - person soru; 15.02.2019