Как заставить 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 обновить?

M4ks
источник
Примечание: у меня была эта проблема с Atlassian Maven (из плагина SDK), и обновление до новой версии решило проблему.
Wirone

Ответы:

1598
mvn clean install -U

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

lwpro2
источник
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

FuzzyJulz
источник
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

GlaIZier
источник
13

Если вы не уверены, что находится внутри вашего локального репозитория, я рекомендую запустить сборку с опцией:

-Dmaven.repo.local=localrepo

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

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

В моем случае сначала я сделал:

mvn clean install -U

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

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

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

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

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

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

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

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

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

Willyan
источник
2

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

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

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

Матиас М
источник
2

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

Насколько я понимаю, в Maven или, точнее, в плагине Eclipse Maven есть ошибка, связанная с этим. Кто-то должен сообщить об этом.

Мартин Керстен
источник
2

Вам необходимо проверить файл settings.xml в <maven_home>/confкаталоге.

Ашиш Нариял
источник
1

У меня та же ошибка с зависимостью android-maps-utils. Использование пакета типа aar в разделе зависимостей решит мою проблему. По умолчанию типом является jar, поэтому можно проверить, какой тип зависимости загружается в хранилище.

zhen_khokh
источник
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 >> Обновить проект >> установите флажок «Принудительное обновление снимков / выпусков»

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

Tarun11
источник
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 снова попытаться получить зависимости.

ankidaemon
источник
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. Это решило мою проблему.

Gelo
источник
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 не смог ее найти!

user1208639
источник
-3

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

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

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

rich_markle
источник
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делает.

mroman
источник