Мевен: Не вдалося прочитати дескриптор артефактів


258

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

Коли я намагаюся побудувати свій проект з терміналу, я отримую цю помилку:

Failed to read artifact descriptor for com.morrislgn.merchandising.common:test-data-utils:jar:0.3b-SNAPSHOT: Could not find artifact com.morrislgn.merchandising:merchandising:pom:0.3b-SNAPSHOT

common.test-data-utilsБанку створюється окремий проект і розподіляється між цим та іншим проектом (інший проект не будує або, але це вниз до іншої проблеми).

Я вмію створювати com.morrislgn.merchandising.common:test-data-utilsбез проблем, я бачу запис, який він робить у .m2локальному сховищі на моїй машині. Я також повторно застосував своє сховище в Eclipse.

POM для мого проекту має цей запис:

<dependency>
    <groupId>com.morrislgn.merchandising.common</groupId>
    <artifactId>test-data-utils</artifactId>
    <version>0.3b-SNAPSHOT</version>
</dependency>

Яке здається мені правильним - POM не повідомляє про будь-які помилки під час його перегляду в Eclipse.

Чи може хтось мені сказати, чого я тут пропускаю чи роблю неправильно?

Відповіді:


183

Ви завжди можете спробувати mvn -U clean install

-U змушує перевірити оновлені випуски та знімки у віддалених сховищах.


40
@MrPhi: Якщо у вас є плагін m2e, ви можете використовувати Maven -> "Оновити проект ...". У наступному діалоговому вікні буде можливість форсувати оновлення знімків та випусків.
Аарон Дігулла

1
@AaronDigulla Це діалогове вікно, яке викликає для мене помилку.
Йероен

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

У мене теж було подібне питання. Це дійсно допомагає, і крім того, якщо ви використовуєте приватний mvn repo, переконайтесь, що спочатку додайте його до свого ~/.m2/setting.xmlдзеркального розділу, а потім після запуску mvn -U clean install, переконайтесь, що Reimport(натисніть на проект правою кнопкою миші, потім під нижньою Mavenсекцією є Reimportкнопка ).
JACK ZHANG

1
@TomaszWaszczyk: Так, є. 1. Перегляд Windows-шоу-> Термінал. 2. Додати локальний термінал 3. cd PomFilePath 4. Виконай команду
Vishnu Dahatonde

142

Ця проблема може виникнути, якщо у вас є кілька дочірніх проектів, які посилаються на батьківський pom, а ви не встановлені з батьківського каталогу pom (запустіть mvn installз батьківського каталогу). Один із дочірніх проектів може залежати від проекту для братів і сестер, і коли він перейде до читання пам’яті побратимів, він не матиме помилки, згаданої у питанні, якщо ви хоч раз не встановили з батьківського каталогу pom.

Я просто зіткнувся з цією проблемою під час переміщення проекту на новий комп’ютер. Я мав звичку запускати команди з дочірнього проекту і не запускав інсталяцію на батьківську.


13
Крім того, під час запуску mvn installна батьківській програмі ви також можете додавати -Nнерекурсивні операції. Це призведе до того, що Maven пропустить всі модулі (включаючи той, який виходить з ладу) і просто зробить installмету для батьків.
Яцек Прусія

@JacekPrucia Добре знати, що також слід встановити артефакт пам’яті (якщо ваш батько - пом.)
Адріан

@bzuillsmith навіщо вам бігати mvn installв батьківський пом. Хіба це не використовуватиметься лише для того, щоб можна завантажити залежність від братів і сестер? Якщо ви випадково зайшли в каталог братів і братів і побігли mvn installзвідти, щоб баночка знаходилась у вашому локальному сховищі, чи не зробити це точно точно?
user2158382

Минуло кілька років, як я використовував maven, але - Так, я вважаю, що ви можете встановити залежності побратимів по черзі. Установка з батьківського просто має менше роботи (менше команд набирати та запускати). Можливо, у великих проектах є випадки, коли ви не хочете, щоб усі дочірні проекти були встановлені, і тоді вам потрібно буде запускати їх окремо.
bzuillsmith

Мій проект, як ch-multip-spring \ simple-parent \ simple-model \ pom.xml, я роблю mvn clean install з кореневої папки ch-multip-spring (не з простого батька), і це вирішило мою проблему аналогічно до назви посади.
IcyBrk

104

З тією ж проблемою був і IntelliJ IDEA, і далі працював.

  • Йти до File
  • Виберіть Settings
  • Виберіть Build, Execution, Deployments
  • Виберіть Build Toolsзі спадного меню
  • Виберіть Mavenзі спадного меню
  • Поставте Always update snapshotsпрапорець

знімок екрана IntelliJ 2017.2> Налаштування / налаштування> Збірка, виконання, розгортання> Інструменти збирання> Maven> Завжди оновлювати знімки (прапорець)


1
Це працювало для мене, але я не розумію, чому - я намагався створити з командного рядка. Чи було щось кешоване з IntelliJ?
goodOldFashioned

Працював і для мене! Не можу повірити, як це було страшно. Дякую!
Бен Арена

@ goodOldFashioned: Це "завжди оновлення" замінює .... lastUp updated файл з локального сховища. -U робить те ж саме з командного рядка. Тож Intellij виправила ваше місцеве репо, а потім командна лінія знову запрацювала.
Frischling

Простий та ефективний
Ojonugwa Jude Ochalifu

2
переглянувши весь Інтернет, нарешті це спрацювало для мене
khawarizmi

37

Якщо ви використовуєте Eclipse, клацніть правою кнопкою миші на вашому проекті -> Maven -> оновити проект . Це відкриє діалогове вікно оновлення проекту Maven Project.

У цьому діалоговому вікні встановіть прапорець Примінити оновлення знімків / випусків і натисніть кнопку ОК . (Будь ласка, дивіться зображення нижче)

Оновіть діалогове вікно проекту Maven

Це працювало для мене!


36

Якщо ви використовуєте затемнення, клацніть правою кнопкою миші на проект -> властивості -> Maven і переконайтесь, що " Вирішити залежності від проектів робочої області " не натиснуто.

Сподіваюсь, це допомагає.


4
Це працює для мене. Але я не розумію, чому? Будь-яке пояснення за цим?
Ананд

1
для мене це не спрацювало, спочатку 12 пристойностей бракувало, після цього це зараз 74
користувач2044822

27

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



1
Спасибі, хлопці! Це працювало на мене і економило багато часу.
сказавфаган

14

У мене була така ж проблема з eclipse, де командний рядок maven build працював чудово, але спробуйте це

  • зайдіть у .m2 / сховище та витріть пов'язаний каталог
  • запустіть оновлення Maven залежності в затемненні

Помилка відходить .... чому мій командний рядок mvn працював з цими каталогами та eclipse .m2eclipse не міг, я не маю уявлення, і це начебто відстій. Зараз мій проект знову працює в затемненні.


на стороні записки, ми перейшли на gradle .... настільки щасливіші, ніж мураха і maven .... надзвичайно приємна установка.
Дін Гіллер

Навіть не впевнений, що це щось пов'язане із затемненням. У мене була така ж проблема з IntelliJ, і видалення проблемних пакетів і повторний запуск mvn clean installпрацював
Jay

12

У мене була така ж проблема з використанням IntelliJ. Я вирішив правою кнопкою миші на pom.xml> Maven> Reimport


Так, життя так просто. У будь-якому випадку, відповідь @prime працювала на мене.
Імам Бакс

10

Я вирішив цю проблему, видаливши в папках репозиторію, де ця помилка показала все, крім файлів .jar та .pom.


Я також вирішив ту саму проблему, видаливши відповідні файли в локальному сховищі Maven, а потім оновивши весь проект.
Ad Infinitum

8

Проблеми "не вдається прочитати дескриптор артефактів", як правило, вказують на проблему з файлом pom із залежністю у сховищі Maven. Я б запропонував вам двічі перевірити, чи ім'я файлу pom збігається з іменем Maven, а також перевірити, чи правильний вміст файлу pom.


1
Перевірка pom.xml була корисною. Я виявив, що у мене була однакова залежність двічі (помилка копіювання та вставки). Після прибирання все було добре.
Адам Бочек

8

Для мене це стосувалося встановлення "User Setting.xml" всередині

Window > preferences > Maven > User Settings > and then browsing to the user Settings inside the { maven unarchived directory / }/apache-maven-2.2.1/conf/settings.xml . 

6

У мене є проект

 A/
 |--a1
 |--a2

Зараз в нашому органі є ще один проект

 B/
 |--b1
 |--b2
 |--b3

(Кожен модуль a1, b1 і т. Д. Та батьківські проекти A, B мають власні pom.xml згідно зі стандартними правилами для батьків та дитини)

Обидва проекти перевіряються на моєму місцевому затемненні (від SVN). Я активно працюю над А.

Я дізнався, що існує хороша загальна функціональність (b4), розроблена в B, і мені потрібно було її використовувати.

 B/
 |--b1
 |--b2
 |--b3
 |--b4 (NEW)

Розробник b4 розгорнув цей модуль b4 як артефакт у сховищі нашого органу. Я включив залежність до POM мого модуля, тобто a2's pom.xml. Eclipse завантажив у repoqired артефакт з репо, і я міг імпортувати класи в ньому.

Тепер випуск починається ... Мені потрібно було перевірити вихідний код b4 з якоюсь метою, і оскільки я вже перевіряв B на своєму локальному затемненні, я оновив його з SVN і перевірив модуль b4. Я також запустив pom.xml модуля b4 з такими цілями, як clean, package тощо. Через деякий час, коли я закінчив кодування, мені потрібно було створити JAR мого модуля a2. Я запустив "пакет" на a2's pom.xml та BAM !! помилки n помилки для модуля a2 .. Ці помилки також були не дуже зручними для користувачів. Єдине, що в журналах точно було ім'я b4.

Рішення: Пробуючи багато рішень протягом багатьох годин, я запустив "mvn -U clean install" з консолі в дирекції мого проекту B (тобто в ../codebase/B). Оскільки B є батьківським, команда clean install запускається для всіх модулів, включаючи b4, і вона успішно виконується. Після цього я запустив "mvn -U clean install" для свого батьківського проекту, який є А. І це спрацювало! a2 модуль успішно складено, встановлено (упаковано пізніше).

Тут важливим моментом було те, що якщо b4 знаходиться у вашій робочій області, не встановлюйте лише b4. Вам потрібно буде очистити та встановити повний Б. Я вирішив це рішення, прочитавши відповідь від Zuill

EDIT: Ще одна річ, що слід зазначити, що якби у мене проект B не був перевірений у локальному середовищі, ця проблема могла б не виникнути для мене. Я схильний вважати, що це сталося через те, що я B перевірився в моєму робочому просторі.


5

Ви згадуєте два різні групи ID com.morrislgn.merchandising.commonі com.johnlewis.jec.webpim.common. Можливо, в цьому і полягає проблема.


Гарне місце - ні, це не випадково. Я скопіював неправильний тег з POM XML, це був той тег, який мені потрібен, і не помітив того, що я зробив. Ой! Я відредагував питання, щоб виправити свою дурість!
Morrislgn


4

Не пощастило оновитись через затемнення. Довелося використовувати mvn clean install -U (який вирішив усе).


10
На це відповів і Гал Брача. Краще проголосувати робочу відповідь та за потреби додати коментарі.
Брайан Уайт

4

Для мене, здається, насправді були проблеми з POM залежності.

Я працював над цим, використовуючи віртуальний сховище jitpack, за допомогою якого ви можете включати сховища github на основі їх URL-адреси замість власної POM (що, здається, у моєму випадку було помилковим).

    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>

3

Я мав таку ж проблему деякий час, і незважаючи на те, mvn -U clean installщо проблема не вирішувалася!

Нарешті я вирішив проблему, видаливши всю .m2папку, а потім перезапустив свою IDE і проблеми не було!

Тому іноді проблема може виникнути через деякі несумісності або проблеми у вашому місцевому сховищі Maven.


Спробував зробити Maven resync, перебуваючи в автономному режимі, і повністю задіяв IntelliJ. Дотримуючись ваших порад, видалено .m2, і тепер це працює як шарм! Дякую!
Віктор Гразі

3

У нашому випадку помилка з'явилася через неправильне перейменування groupId, тоді як деякі проекти в мультимодульній конфігурації Maven посилаються на інші.

У нас був проект агрегатора ( billing-parent) з двома модулями ( billing-api, billing):

com.company.team:billing-parent
|-com.company.team:billing-api
|-com.company.team:billing

Проект billingзалежить від billing-api. Тож у своєму складі pom.xmlбуло:

<dependency>
    <groupId>com.company.team</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Ми вирішили перейменувати groupId з com.company.teamна com.company.team.billing. Ми замінили старе значення в батьківських pom.xmlта в <parent>розділах обох модулів. Але забув оновити залежність вище. Таким чином, ми отримали конфігурацію, в якій billingпроект посилається на старий billing-apiартефакт. Врешті-решт, він billingчерез деякий час збирає модуль з такою помилкою

[ERROR] Failed to execute goal on project billing: Could not resolve dependencies for project com.company.team.billing:billing:jar:3.5.1-SNAPSHOT: Failed to collect dependencies at com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failed to read artifact descriptor for com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failure to find <parent of the com.company.team:billing-parent project which is not available any more>

незважаючи на те, що billing-apiмодуль будується без помилок.

Рішення 1: перейменування groupIdв dependencyа.

Рішення 2: замінити groupIdв ${project.groupId}власності , як це:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Висновок. Тому моя порада у випадку, якщо ви зіткнулися з помилкою в конфігурації мультимодулів: слід ретельно перевірити groupIdта artifactIdзалежність від сусідніх модулів.


2

Перейдіть по оболонці всередині папки проекту та виконайте наступну команду:

mvn -U clean install

Зазвичай це вже повинно вирішити вашу проблему.

Якщо ви бачите таке повідомлення:

Не вдалося вирішити залежності для проекту: war: 0.0.1-SNAPSHOT: Не вдалося зібрати залежності на com.sun.jersey: jersey-server: jar: 1.9

Потім виконайте:

export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

далі:

mvn -U clean install

знову, щоб остаточно оновити свої залежності.

Після цього виконайте чисте будівництво Maven:

maven clean install

1

У мене була подібна проблема. У моєму випадку версія testng у моїй папці .m2 / repositories була пошкодженою, але коли я видалив її та зробив оновлення Maven знову, все працювало нормально.


0

У мене ця проблема була в затемненні, mvn -U clean installне працювала, але правою кнопкою миші на проект та вибором Maven-> Update Project виправлено його.


0

Я тільки почав використовувати STS Eclipse вперше за допомогою Maven. Проект, який я налаштовував, вже мав власні settings.xml. У такому випадку потрібно оновити файл settings.xml у конфігурації запуску.

  1. клацніть правою кнопкою миші pom.xml і "Запустити як" -> "Запустити конфігурації ..."

  2. де написано "Налаштування користувача", натисніть кнопку "Файл" та додайте налаштування.xml.

  3. Я думаю, що це стосується вашого проекту, але для моїх "Цілей" встановлено "чисте встановлення", і я перевірив "Пропустити тести".


0

Ця помилка в основному говорить про те, що Maven не міг прочитати певну залежність від локального сховища. Це може статися, тому що файл jar не був завантажений правильно. Отже, перейдіть до локального сховища Maven і переконайтесь, що немає файлу розширення .lastUpdated .


0

Це допомогло мені:

Від IDE (Red Hat CodeReady Studio у моєму випадку).

Windows -> Показати перегляд -> Термінал -> Відкрити / Додати локальний термінал

Виконайте команди наступним чином>

$ cd /pom-file-path/

$ mvn -U clean install


-4

Я вирішив цю проблему, змінивши налаштування maven.xml та сховище


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