Загрузки Maven имеют расширение .lastUpdated как расширение


82

У меня есть установка Eclipse с m2eclipse и subversive. Я импортировал проект maven2 из svn. Но я получаю сообщение об ошибке, что отсутствует целый ряд артефактов (например: Missing artifact org.springframework: spring-test: jar: 3.0.1.RELEASE: test).

Если я загляну в свой репозиторий, я вижу там файлы jar, но у них есть дополнительное расширение .lastUpdated. Почему maven добавляет .lastUpdated к банкам? И что еще более важно: как это исправить?

В моих POM нет упоминания о типе lastUpdated.

Ответы:


60

Эти файлы указывают Maven на то, что он попытался получить архив путем загрузки, но безуспешно. В целях экономии полосы пропускания он не будет пытаться повторить эту попытку до тех пор, пока не истечет определенный период времени, закодированный в файле. Параметр командной строки -U заставляет maven выполнить обновление до периода повтора. Это может быть необходимо, если вы пытались построить, отключившись от сети.

Метод удаления файлов работает с большинством версий maven, но, поскольку файлы являются внутренними воспоминаниями maven, я бы не рекомендовал этот метод. Нет никакой гарантии, что эта информация не упоминается или не хранится где-либо еще, и такие манипуляции могут повредить систему.


Я попробовал mvn -U clean, но это не помогло. Я что-то упускаю?
MiguelMunoz

Ваше последнее утверждение в первом абзаце звучит как противоречие для меня, как новичка в этом вопросе - это может быть необходимо, если вы пытались строить, будучи отключенным от сети. Если я пытаюсь выполнить это при отключении, то -U попытается загрузить из удаленного репозитория и потерпит неудачу в соответствии с моей интерпретацией того, что вы сказали.
Sandeepan Nath

Я имел в виду, что «установка -U может потребоваться, если вы пытались строить без подключения к сети, и маркер был установлен».
Jörn Guy Süß

14

Как сказал rperez , я использую для удаления всех этих .lastUpdatedфайлов. Для простоты в Linux я создал небольшой скрипт :

find -name \*.lastUpdated -exec rm -fv {} +

Просто создайте файл с предыдущим содержимым и поместите его в локальный репозиторий Maven. Обычно так и будет ~/.m2/repository.


2
в zsh:rm ~/.m2/repository/**/*.lastUpdated
Dacav

3
Вы также можете просто использовать ФАЙНД deleteфлаг , чтобы удалить файлы , которые он находит, а execING rmпо результатам. Например,find ~/.m2 -name *.lastUpdated -delete
spaaarky21 09

7

Я установил Maven2 и запустил mvn compile из командной строки. Кажется, проблема решена


Компиляция с использованием командной строки решила эту проблему для меня. Я думаю, это может быть проблема с m2eclipse.
TAN70

1
Работая на Windows 7 Professional SP 1, в 2017 году у меня были аналогичные проблемы с подключаемым модулем Eclipse, и я отказался от него в пользу интерфейса командной строки, который дает гораздо более полные и удобные отчеты, которые я могу сохранять, импортировать в Excel и генерировать всевозможные полезные отчеты, охватывающие отсутствующие пакеты, файлы, которые не загружались, непарные POM и JAR, а также другую полезную статистику.
Дэвид А. Грей

2

Если вы столкнулись с этой проблемой и используете Nexus, возможно, у вас определено неправильное правило маршрутизации. Я сам нажал на это, и файлы, которые он загружал, были правильно названы, по правильным URL-адресам, на которые он смотрел, но все они были с .lastUpdatedрасширением и сообщением об ошибке в качестве содержимого.


1

у вас может возникнуть проблема с некоторыми артефактами, которые нужно получить из репозитория. например, у Spring framework есть собственный репозиторий. это расширение добавляется, когда артефакт не может быть полностью загружен. добавьте репозиторий Spring framework в свой pom или settings.xml, удалите папку, содержащую сломанные банки, и начните снова


Согласен. Вместо действительного pom или jar обычно pom или jar, заканчивающийся lastUpdate, имеет размер всего 2k, содержимое которого больше похоже на журнал ошибок. Обычно это результат «не удалось собрать зависимости в ...»
Тиина

Это интересный способ думать о них; Я всегда думал о них как о отдельных объектах (файлы lastupdated), а не как о JAR или POM, о которых они сообщают. Точно так же я считаю MyDotNetAssembly.exe.config отдельным типом файла от MyDotNetAssembly.exe.
Дэвид А. Грей

0

Откройте свой терминал, перейдите в каталог проекта Eclipse и запустите:

mvn install

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

mvn install -U

Это гораздо более безопасный подход по сравнению с изменением файлов maven при удалении ".lastUpdated".


1
У меня такая же проблема, и я mvn install -Uне помог. mvn clean installтоже не справился со своей задачей
roxch

0

Используйте эту команду в каталоге .m2 / repository, чтобы переименовать все файлы:

for file in `find . -iname *.lastUpdated`; do renamed=$(echo $file | rev | cut -c13- | rev); echo renaming: $file to $renamed; mv $file $renamed; done

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

Это не работает ... .jar потерян. :(

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.