Завантаження Maven мають .lastUpdated як розширення


82

У мене встановлена ​​програма Eclipse із m2eclipse та subversive. Я імпортував проект maven2 із svn. Але я отримую повідомлення про помилку про те, що відсутня ціла купа артефактів (наприклад: Відсутній артефакт org.springframework: spring-test: jar: 3.0.1.RELEASE: test).

Якщо я загляну до мого сховища, я бачу там файли jar, але вони мають додаткове розширення .lastUpdated. Чому maven додає .lastUpated до банок? І що ще важливіше: як я можу це виправити?

У моїх POM немає згадки про тип lastUpdated.

Відповіді:


60

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

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


Я спробував mvn -U clean, але це не вирішило проблему. Мені чогось не вистачає?
MiguelMunoz

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

Я мав на увазі, "налаштування -U може стати необхідним, якщо ви намагалися побудувати під час відключення від мережі, і маркер встановлено."
Йорн Гай

14

Як сказав rperez , я використовую для видалення всіх цих .lastUpdatedфайлів. У Linux я створив невеликий сценарій, щоб зробити це простим :

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

Просто створіть файл із попереднім вмістом і розмістіть його у своєму локальному сховищі Maven. Зазвичай це буде ~/.m2/repository.


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

3
Ви також можете просто використовувати deleteпрапорець пошуку, щоб видалити знайдені файли, замість того, щоб execописувати rmрезультати. Наприклад,find ~/.m2 -name *.lastUpdated -delete
spaaarky21

7

Я встановив Maven2 і запустив mvn compile з командного рядка. Здається, це вирішило проблему


Компіляція за допомогою командного рядка вирішила цю проблему для мене. Я думаю, що це може бути проблемою m2eclipse.
TAN70

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

2

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


1

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


Погодьтеся. Замість дійсного pom або jar, зазвичай pom або jar закінчується lastUpdate розміром лише 2k, вміст якого більше нагадує журнал помилок. Зазвичай це результат "не вдалося зібрати залежності на ..."
Тійна

Це цікавий спосіб мислення про них; Я завжди думав про них як про окремі сутності (останні оновлені файли), а не про 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.