Змусити повторно завантажити залежність випуску за допомогою Maven


135

Я працюю над проектом із залежністю X. X, у свою чергу, залежить від Y.

Раніше я чітко включав Y в пом. Мого проекту. Однак він не використовувався і щоб зробити речі більш чистими, я замість цього додав його до пам’яті X як залежність. X позначено як залежність випуску.

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

Отже, не видаляючи каталог ~ / .m2 / repository, як я можу примусити повторне завантаження пам’яті X? Також я спробував бігати, dependency:purge-local-repositoryі це не вийшло.


Ви позначили питання як "maven-2". Для вирішення цієї проблеми в Maven 3 був доданий варіант -U. Я б запропонував оновити.
Марк О'Коннор

Щойно з точки зору методології, якщо ви змінюєте Xpom, тоді він повинен становити новий випуск, навіть якщо це лише зміна номера виправлення: 1.3-> 1.3.1. Отже, це усуне цю проблему з початку роботи.
jpaugh

Однак, як і раніше, можливі подібні проблеми із знімками, тому добре відповісти.
jpaugh

Відповіді:


165

Ви не можете зробити 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
Це допомагає в крайньому випадку, у мене був проект, де затемнення і мавен були трохи «заплутані». Просто видалення папки .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
Було б непогано знати, як вони реалізували ту частину "/ релізів".
Ulises Layera

Дякую за це саме те, що мені було потрібно.
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 / сховище ..... / фактичний_путь, куди надходить недійсний LOC, оскільки він змушує повторно завантажити видалені файли jar. Не видаляйте всю папку сховища, а не видаляйте конкретну папку, звідки надходить помилка.


0

Видалення ~/.m2/repositoryзаповіту вирішить вашу проблему. Але, якщо вам все-таки потрібно зберегти старе, ~/.m2/repositoryви можете просто змінити локальний шлях Maven тимчасово.

Якщо ви працюєте над IntelliJ, просто перейдіть до Maven Settings і змініть шлях локального репозиторію на інше місце. Можливо, вам буде потрібно встановити прапорець біля пункту "Перезазначити" поблизу.

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


-1

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

Але якщо ви використовуєте IntelliJ і хочете, щоб він виправляв це автоматично, перейдіть до Maven Settings.

Збірка, виконання, розгортання -> Інструменти побудови -> Maven

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

Вимкнути роботу в режимі офлайн

Увімкнути Завжди оновлювати знімки (перемикатися, коли потрібно)


1
Буду вдячний, якщо ви також можете поділитися причиною зворотного руху, поки ви перебуваєте на цьому. Дякую.
Абхішек Нандгаонкар

1
Імовірно, оскільки знімки не є випусками, це не вирішує проблему.
сор

-2

Перейдіть до шляху побудови ... видаліть існуючу бібліотеку Maven u додано ... натисніть кнопку Додати бібліотеку ... натисніть Maven керовані залежності ... потім натисніть параметри проекту Maven ... встановіть прапорець для вирішення залежностей Maven. залежні залежності


2
Це передбачає використання деяких IDE, припущення, яке не підтримується питанням, і ви навіть не вказали, що таке IDE!
Філ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.