Як змусити оновити Maven?


730

Я імпортував свій вже працюючий проект на інший комп'ютер, і він почав завантажувати залежності.

Мабуть, моє інтернет-з'єднання вийшло з ладу, і тепер я отримую наступне:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

Як змусити Maven оновлюватись?


Побічна примітка. У мене ця проблема була з Atlassian Maven (з плагіна SDK), і оновлення до нової версії вирішило проблему.
Wirone

Відповіді:


1596
mvn clean install -U

-Uозначає примусове оновлення залежностей знімка . Залежності звільнення не можна оновити таким чином.


32
Я згоден з lwpro2, це вирішило і мою проблему. Просто робити mvn чистим недостатньо. Відповіді Navi недостатньо для вирішення проблеми.
Р. ван Твіск

1
Я вважаю, що це складніше, якщо ви використовували артефактичні та використовували ідентифікатор сховища "центральний", оскільки метадані, очевидно, не видаляються.
ggb667

2
Схоже, це фактично не оновлює банки залежностей від знімка, а лише метадані.
Родді з замороженого гороху

якщо він викликаний .lastupdate-файлом, сформованим після останнього невдалого завантаження залежності, цей метод не працюватиме, нам потрібна щось на зразок відповіді
Роберта Рейза

1
Я переглядаю допомогу для попередніх версій і до Maven 2.0.4, опис прапора -U був: "-U, - update-snapshots Оновити всі знімки незалежно від політики сховища", починаючи з 2.0.5, це стало: "-U, - update-snapshots Здійснює перевірку оновлених випусків та знімків на віддалених сховищах" І так було з тих пір. Обидві версії були випущені в 2007 році. Цікаво, чи потрібно редагувати відповідь для врахування випусків?
cleberz

93

Якщо ваш локальний сховище якимось чином замикається на банки з випуском, на відміну від знімків ( -Uі --update-snapshotsлише оновлення знімків), ви можете очистити локальне репо, використовуючи наступне:

 mvn dependency:purge-local-repository

Ймовірно, тоді ви хочете знову очистити та встановити:

 mvn dependency:purge-local-repository clean install

Більше інформації можна отримати на веб-сторінці https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html


8
Як тільки я це зробив mvn dependency:purge-local-repository, він знову знову завантажив усі залежності, саме цього я хотів
smac89

92

-U здається, змушує оновити всі залежності.

Якщо ви хочете оновити єдину залежність без чистого або -Uви можете просто видалити її з місцевого репо, а потім скласти.

Приклад нижче, якщо для оновлення slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile

Це добре працює, якщо ви використовуєте інший інструмент, крім maven, який посилається на ваше місцеве сховище Maven.
Mansoor Siddiqui

57

Усі відповіді тут не працювали для мене. Я використав метод молотка:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

Це вирішило проблему :-)


@ DJ2 Це видаляє всі файли у .m2-директорії з назвою*.lastUpdated
sjngm

find ~/.m2/ -name "*.lastUpdated" -deleteобходиться без небезпеки xargsабо rmперевищення деяких обмежень (якщо знайдено багато файлів).
A Sz

45

Ви можете зробити це ефективно Eclipse IDE. Звичайно, якщо ви цим користуєтеся.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases

1
Я зробив версію командного рядка у відповіді @ lwpro2, яка дозволила мені будувати командний рядок , але тоді я все ще не міг будуватись у межах Eclipse. Це зробило це для побудови за допомогою Eclipse.
Цегла

Для мене працює лише в тому випадку, якщо після завершення оновлення закриваю і знову відкриваю Eclipse.
ceklock

33

Про всяк випадок, якщо хтось хоче лише оновити залежність від знімків проекту та не захоче встановити артефакт:

mvn dependency:resolve -U

Не забудьте знову імпортувати залежності в IDE. У IDEA потрібно клацнути правою кнопкою миші на файл pom і вибрати Maven -> Reimport


13

Якщо ви не впевнені, що знаходиться у вашому локальному сховищі, рекомендую запустити збірку за допомогою параметра:

-Dmaven.repo.local=localrepo

Таким чином ви забезпечите будівництво в чистому приміщенні.


5
ця команда означає використовувати папку localrepo для локального сховища. це добре для робочого простору одного проекту, але погано, якщо у вас є більше одного проекту, а мало хто залежить від іншого. то вам краще надати повний шлях, як -Dmaven.repo.local = / data / my / localrepoDir
tgkprog

9

У моєму випадку спочатку я:

mvn clean install -U

Але все-таки була така ж помилка, тоді я закрив проект і знову відкрив його. Нарешті спрацювали.


Я думаю, що ви можете просто зробити реімпорт залежностей, щоб уникнути повторного відкриття проекту
GlaIZier

4

Якщо ви використовуєте IDE затемнення :

  • Виберіть Проект.
  • Натисніть alt + F5, з'явиться вікно для оновлення проекту Maven.

  • Перевірити - змусити оновити знімки / випуски та натиснути ОК.

Якщо використовується Intellij IDE

  • перейти до налаштувань / Maven
  • перевірити Завжди оновлювати знімки

3

Я використовував IntelliJ IDE і у мене виникла подібна проблема, і для вирішення я натиснув "Створити джерела та оновити папки для всіх проектів" на вкладці Maven.

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


2

У мене помилка в іншому контексті. Тож моє рішення може бути корисним іншим, хто натикається на питання:

Проблема: я скопіював локальний сховище на інший комп'ютер, який не має зв'язку з спеціальним сховищем. Тож Мейвен спробував перевірити артефакти щодо недійсного сховища.

Моє рішення: Видаліть файли _maven.repositories.


2

Це одна з найприємніших речей про Мейвена. Для мене трапляється таке: якщо я додаю залежність, яка вимагає більшої кількості залежностей і більше, але у мене є повільне з'єднання, воно припиняється під час завантаження та вичерпання часу. Під час вичерпання часу ще не встановлені залежності позначаються власниками місць у кеш.

Наскільки я бачу, Maven або, точніше, плагін Eclipse Maven має помилку щодо цього. Хтось повинен повідомити про це.



1

У мене така ж помилка із залежністю від android-maps-utils. Використання пакету aar у розділі залежності вирішує мою проблему. Типовим типом є jar, тому може бути перевірено, який тип завантаженості залежить у сховищі.


1

Щоб вирішити цю проблему з Eclipse:

1) Додайте нижче залежність у Maven pom.xml та збережіть файл pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Перейдіть до проекту >> Maven >> Update Project

виберіть проект і натисніть кнопку ОК.

3) Необов’язковий крок, якщо він не вирішений до кроку 2, тоді виконайте нижче крок після виконання кроку-1

Перейдіть до проекту >> Maven >> Update Project >> встановіть прапорець "Примусове оновлення знімків / релізів"

виберіть проект і натисніть кнопку ОК.


1

Попередні версії maven не змушували перевіряти відсутність випусків при використанні -U з mvn clean install, лише знімки, хоча новіша версія підтримує це.

Для тих, хто все ще бореться з попередньою версією, наступне може бути корисним,

У Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

У Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Щоразу, коли maven не може завантажувати залежності з будь-якої причини (підключення / не існує тощо), він додасть ".error = Не вдалося перенести артефакт" у файл залежності - name.lastUpdate у відповідній папці під каталогом $ home / .m2. Видалення цих файлів змусить Maven спробувати випробувати залежності знову.


0

Важливо додати, що головна відмінність роботи mvn з -U і без -U полягає в тому -U, що перекриє ваші локальні банки SNAPSHOT з віддаленими банками SNAPSHOT.

Локальні банки SNAPSHOT, створені з локальних mvn installу випадках, коли у вас є інші модулі програми, які генерують банки.


0

-U використовується для примусового оновлення maven Repo. Використовуйте

mvn -U clean install

Це точно така ж відповідь, як і прийнята відповідь. Дано на 6 років раніше ...
Кервін Снайдерс

@KerwinSneijders Я в той час додав відповідь 2 роки тому, прийнята відповідь не
дала

Наскільки я можу сказати, прийнята відповідь включала цю інформацію з дня її опублікування. (14 березня '12). І навіть якщо цього не сталося, цю інформацію краще розмістити в коментарі нижче прийнятих відповідей, оскільки це не відповідь, а додаткова інформація
Кервін Снейдерс,

0

Я спробував усі відповіді тут, але ніби нічого не вийшло. Спочатку перезапустив комп'ютер, а потім побіг mvn clean install -U. Це вирішило мою проблему.


0

Що Maven робить, це завантажує всі залежності вашого проекту у вашу локальну репо (папку .m2). Через Інтернет, що викликає проблеми з місцевим репо, у вас проект стикається з проблемами. Я не впевнений, чи це вам точно допоможе чи ні, але ви можете спробувати видалити всі файли в папці сховища всередині папки .m2. Оскільки в місцевому репо не буде нічого, maven буде змушений знову завантажувати залежності, тим самим змушуючи оновити. Як правило, папка .m2 знаходиться за адресою c: users: [ім'я користувача] :. m2


-1

У мене була ця проблема з іншої причини. Я зайшов до сховища Maven https://mvnrepository.com, шукаючи останню версію весняного ядра, яка на той момент становила 5.0.0.M3 / Репозиторій показав мені цей запис для мого pom.xml:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Наївний дурень, що я є, я припустив, що коментар говорить мені, що jar знаходиться в сховищі за замовчуванням.

Однак, після великої стукани головою, я побачив примітку трохи нижче xml із зазначенням "Примітка: цей артефакт знаходиться в публічному сховищі Alfresco ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Тож коментар у XML повністю вводить в оману. Баночка знаходиться в іншому архіві, і тому Мейвен не зміг її знайти!


-3

Ми можемо змусити отримати останнє оновлення випуску та сховища знімків із командою нижче:

mvn --update-snapshots clean install

12
Це точно така ж відповідь, як і прийнята відповідь. -U - це коротка форма --оновлення знімків.
Родді з замороженого гороху

-3

У мене була така ж помилка і біг, mvn install -Uа потім біг mvn installпрацював на мене.


10
Будь ласка, не публікуйте відповіді "те, що згадувалось у всіх інших відповідях, працювали і на мене" .
kryger

-4

Нещодавно я зіткнувся з цим і виконав наступні проблеми, які вирішили всі проблеми

mvn -fae install

5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueЗдається дивним способом виправлення неоновлених зовнішніх залежностей ..
Donatello

-5

mvn clean install -Uне працює. Однак mvn -U cleanслідує mvn clean installробити.

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