Как заставить maven обновление?


732

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

Видимо, мое интернет-соединение оборвалось, и теперь я получаю следующее:

    >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

Ответы:


1598
mvn clean install -U

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


32
Я согласен с lwpro2, это решило и мою проблему. Просто сделать mvn clean недостаточно. Ответа Нави недостаточно для решения проблемы.
Р. ван Твиск

1
Я считаю, что это сложнее, если вы использовали артефакт и использовали идентификатор хранилища «центральный», потому что метаданные, по-видимому, не удаляются.
ggb667

2
Похоже, что это на самом деле не обновляет фляги зависимостей моментальных снимков, а только метаданные.
Родди из замороженного гороха

если он вызван файлом .lastupdated, сгенерированным из последней неудачной загрузки зависимостей, этот метод не сработает, нам нужно что-то вроде ответа Робера Рейза
Junchen Liu

1
Я смотрю на справку по предыдущим версиям и до maven 2.0.4, описание флага -U было: «-U, - update-snapshots Обновить все снимки независимо от политик репозитория», начиная с 2.0.5, это стало: "-U, - update-snapshots Принудительно проверяет наличие обновленных выпусков и снимков в удаленных репозиториях" И так было с тех пор. Обе версии были выпущены в 2007 году. Интересно, должен ли быть отредактирован ответ, чтобы учесть и релизы?
Cleberz

93

Если ваш локальный репозиторий каким-то образом испорчен для выпусков jars, а не для моментальных снимков ( -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

93

-U кажется, заставляет обновить все зависимости.

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

Пример ниже для обновления slf4j-api 1.7.1-SNAPSHOT:

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

Это хорошо работает, если вы используете другой инструмент, кроме maven, который ссылается на ваш локальный репозиторий maven.
Мансур Сиддики

57

Все ответы здесь не сработали для меня. Я использовал метод молотка:

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

Это решило проблему :-)


1
@ DJ2 При этом удаляются все файлы в .m2-директории с именем*.lastUpdated
sjngm

find ~/.m2/ -name "*.lastUpdated" -deleteбудет обходиться без опасности xargsили rmпревышения некоторых ограничений (если найдено много файлов).
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

Тем не менее он показывал ту же ошибку, после чего я закрыл проект и снова открыл его. Наконец-то сработало.


Я думаю, что вы могли бы просто повторно
импортировать

4

Если вы используете eclipse IDE, тогда:

  • Выберите проект.
  • Нажмите Alt + F5, появится окно для обновления проекта Maven.

  • Проверьте - Принудительное обновление снимков / выпусков и нажмите ОК.

При использовании Intellij IDE

  • перейти в настройки / Maven
  • установите флажок Всегда обновлять снимки

3

Я использовал IntelliJ IDE, и у меня возникла похожая проблема, и для ее решения я щелкнул «Создать источники и обновить папки для всех проектов» на вкладке Maven.

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


2

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

Проблема: я скопировал локальный репозиторий на другой компьютер, который не имеет связи со специальным репозиторием. Поэтому Maven попытался проверить артефакты на предмет неверного хранилища.

Мое решение: удалить файлы _maven.repositories.


2

Это одна из самых раздражающих вещей в Maven. Для меня происходит следующее: если я добавляю зависимость, запрашивающую больше зависимостей и все больше и больше, но использую медленное соединение, она перестает работать во время загрузки и тайм-аута. Хотя время ожидания для всех зависимостей, которые еще не получены, помечаются заполнителями в кэше .m2, и Maven не будет (никогда) поднимать их, пока я не удалю запись заполнителя из кэша (как указано), удалив ее.

Насколько я понимаю, в 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 >> Обновить проект

выберите проект и нажмите ОК.

3) Необязательный шаг, если он не решен до шага 2, то выполните шаг ниже после выполнения шага 1

Перейти к проекту >> Maven >> Обновить проект >> установите флажок «Принудительное обновление снимков / выпусков»

выберите проект и нажмите ОК.


1

Предыдущие версии maven не принудительно проверяли отсутствие выпусков при использовании -U с чистой установкой mvn, только снимки, хотя более новая версия поддерживает это.

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

В 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 = Не удалось передать артефакт» в файл dependency-name.lastUpdate в соответствующей папке в каталоге $ home / .m2. Удаление этих файлов заставит maven снова попытаться получить зависимости.


0

Важно добавить, что основным отличием работы mvn с -U и без -U является то, что -Uони переопределяют ваши локальные файлы SNAPSHOT с помощью удаленных файлов SNAPSHOT.

Локальные jar-файлы SNAPSHOT создаются локально mvn installв тех случаях, когда у вас есть другие модули вашего проекта, которые генерируют jar-файлы.


0

-U используется для принудительного обновления Maven Repo. использование

mvn -U clean install

Это точно такой же ответ, как принятый ответ. Учитывая 6 лет назад ...
Кервин Снейдерс

@KerwinSneijders Я добавил ответ 2 года назад в то время, принятый ответ не предоставил информацию о том, что -U здесь делает
Санджив Гуглани

Насколько я могу судить, принятый ответ включал эту информацию со дня его публикации. (14 марта 12 года). И даже если этого не произойдет, эту информацию лучше разместить в комментарии под принятыми ответами, поскольку это не ответ, а скорее дополнительная информация
Кервин Снейдерс,

0

Я попробовал все ответы здесь, но ничего не получалось. Сначала перезагрузил компьютер, затем запустился mvn clean install -U. Это решило мою проблему.


0

Maven выполняет загрузку всех зависимостей вашего проекта в локальное хранилище (папка .m2). Из-за интернет-проблем с вашим локальным репо ваш проект сталкивается с проблемами. Я не уверен, поможет ли это вам наверняка или нет, но вы можете попробовать удалить все файлы в папке хранилища внутри папки .m2. Поскольку в локальном репо ничего не будет, maven будет вынужден снова загрузить зависимости, что приведет к обновлению. Как правило, папка .m2 находится по адресу c: users: [username] :. m2


-1

У меня была эта проблема по другой причине. Я пошел в репозиторий maven https://mvnrepository.com в поисках последней версии ядра core, которая в то время была 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>

Наивный дурак, что я, я предположил, что комментарий говорил мне, что банка находится в хранилище по умолчанию.

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

Поэтому комментарий в XML полностью вводит в заблуждение. Баночка находится в другом архиве, поэтому Maven не смог ее найти!


-3

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

mvn --update-snapshots clean install

12
Это точно такой же ответ, как принятый ответ. -U - это краткая форма --update-snapshots.
Родди из замороженного гороха

-3

У меня была та же ошибка, и бег, mvn install -Uа затем бег mvn installработал на меня.


10
Пожалуйста, не публикуйте ответы, упомянутые во всех остальных ответах.
Крыгер

-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.