Maven: не удалось прочитать дескриптор артефакта


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
Чтобы это работало, вы должны запустить команду, находящуюся внутри корневого каталога вашего проекта
Daria

У меня была похожая проблема. Это действительно помогает, и, кроме того, если вы используете частный репозиторий mvn, убедитесь, что ~/.m2/setting.xmlсначала добавили это в свой раздел зеркала, а затем после запуска mvn -U clean installубедитесь, что Reimport(щелкните правой кнопкой мыши по проекту, затем под нижним Mavenразделом есть Reimportкнопка ).
Джек Чжан

1
@TomaszWaszczyk: Да, есть. 1. Windows-шоу-представление-> Терминал. 2. Добавьте локальный терминал 3. cd PomFilePath 4. Запустите команду
Vishnu Dahatonde

142

Эта проблема может возникнуть, если у вас есть несколько дочерних проектов, которые ссылаются на родительский pom, и вы не установили его из родительского pom-каталога (запускайте mvn installиз родительского каталога). Один из дочерних проектов может зависеть от одноуровневого проекта, и когда он начнет читать pom одноуровневого элемента, он потерпит неудачу с ошибкой, упомянутой в вопросе, если вы не установили его из родительского pom-каталога хотя бы один раз.

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


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

@JacekPrucia приятно знать, что артефакт пом также должен быть установлен (если ваш родитель - пом)
Адриан

@bzuillsmith, почему вы должны запускать mvn installв родительском пом. Разве это не будет использоваться только для того, чтобы можно было загрузить зависимую сестру? Если вы случайно зашли в каталог «родного брата» и запустились mvn installоттуда, так что jar находится в вашем локальном хранилище, разве это не приведет к тому же самому?
user2158382

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

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

104

Была такая же проблема с IntelliJ IDEA, и следующие работали.

  • Перейти к File
  • Выбрать Settings
  • Выбрать Build, Execution, Deployments
  • Выберите Build Toolsиз выпадающего
  • Выберите Mavenиз выпадающего
  • Отметьте Always update snapshotsфлажок

снимок экрана IntelliJ 2017.2> Предпочтения / Настройки> Сборка, выполнение, развертывание> Инструменты сборки> Maven> Всегда обновлять снимки (флажок)


1
Это сработало для меня, но я не понимаю, почему - я пытался построить из командной строки. Было ли что-то кешировано в IntelliJ?
goodOldFashioned

У меня тоже сработало! Не могу поверить, как это было неприятно. Спасибо!
Бен Арена

@ goodOldFashioned: это «всегда обновление» заменяет файл .... lastUpdated из локального репозитория. -U делает то же самое из командной строки. Итак, intellij исправил ваш локальный репо, а затем командная строка снова заработала.
Фришлинг

Просто и эффективно
Оджонугва Джуд Очалифу

2
после просмотра всего интернета, наконец, это сработало для меня
khawarizmi

37

Если вы используете Eclipse, щелкните правой кнопкой мыши на вашем проекте -> Maven -> Обновить проект . Откроется диалоговое окно «Обновить проект Maven».

В этом диалоговом окне установите флажок « Принудительное обновление снимков / выпусков» и нажмите « ОК» . (Пожалуйста, обратитесь к изображению ниже)

Обновление диалогового окна проекта Maven

Это сработало для меня!


36

Если вы используете eclipse, щелкните правой кнопкой мыши проект -> свойства -> Maven и убедитесь, что « Разрешить зависимости из проектов рабочей области » не нажата.

Надеюсь это поможет.


4
Меня устраивает. Но я не понимаю, почему? Есть какое-нибудь объяснение этому?
Ананд

1
у меня это не сработало, изначально пропало 12 приличий, после этого сейчас 74
user2044822

27

Я знаю, что опаздываю на разговор, но у меня тоже была эта проблема. Я думаю, что проблема заключалась в брандмауэре моей компании. Мое решение состояло в том, чтобы отключить от сети, подключиться к нашему открытому беспроводному и затем вызвать обновление через Eclipse. Это решило все.



1
Спасибо, парни! Это сработало для меня и сэкономило много времени.
сказал Фаган

14

У меня была такая же проблема с eclipse, где командная строка сборки maven работала нормально, но попробуйте это

  • перейдите в .m2 / repository и сотрите связанный каталог
  • запустить обновление maven зависимостей в eclipse

Ошибка исчезает .... почему моя командная строка mvn работала с этими каталогами и затмение .m2eclipse не мог, я понятия не имею, и это вроде отстой. Мой проект снова работает в Eclipse.


на заметку, мы переключились на gradle .... намного счастливее, чем ant и maven .... очень хорошая настройка.
Дин Хиллер

Даже не уверен, что это что-то связанное с Eclipse. У меня была та же проблема с IntelliJ, и удаление проблемных пакетов и повторный запуск mvn clean installработали
Jay

12

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


Да, как жизнь так просто. В любом случае, ответ @prime работал на меня.
Имам Букс

10

Я решил эту проблему, удалив в папках репозитория, где была показана эта ошибка, все, кроме файлов .jar и .pom.


Я также решил ту же проблему, удалив связанные файлы в локальном репозитории maven, а затем обновил весь проект.
Объявление 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 в соответствии со стандартными maven-правилами parent и child)

Оба проекта проверены на моем локальном затмении (из SVN). Я активно работаю над А.

Я узнал, что в B есть хорошая общая функциональность (b4), и мне нужно было ее использовать.

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

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

Теперь проблема начинается ... Мне нужно было проверить исходный код b4 для какой-то цели, и, поскольку я уже проверил B на моем локальном затмении, я обновил его из SVN и вынул модуль b4. Я также запустил pom.xml модуля b4 с такими целями, как clean, package и т. Д. Через некоторое время, когда я закончил писать код, мне нужно было создать JAR-файл моего модуля a2. Я запустил "package" на pom.xml и BAM в a2 ошибки n ошибки для модуля a2. Эти ошибки также были не очень удобными для пользователя. Единственное, в логах наверняка было имя b4.

Решение: после многих часов попыток я запустил «mvn -U clean install» из консоли в директории проекта моего B (т.е. в ../codebase/B). Поскольку B является родительским, команда clean install была выполнена для всех модулей, включая b4, и она прошла успешно. После этого я запустил «mvn -U clean install» для моего родительского проекта, который называется A. И это сработало! Модуль a2 был успешно скомпилирован, установлен (упакован позже).

Здесь важным моментом было то, что если b4 находится в вашем рабочем пространстве, не устанавливайте только b4. Вам нужно будет выполнить чистую установку полной версии B. Я пришел к этому решению после прочтения ответа от Zuill.

РЕДАКТИРОВАТЬ: Еще одна вещь здесь, чтобы отметить, что если бы я не был проверен проект B в локальной среде, то эта проблема, возможно, не возникла бы для меня. Я склонен думать, что это произошло, потому что я проверил B в моей локальной рабочей области.


5

Вы упоминаете два разных идентификатора группы, 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 в автономном режиме и полностью подключил 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

У меня была эта проблема в Eclipse, но mvn -U clean installона не работала, но щелкнув правой кнопкой мыши по проекту и выбрав Maven-> Update Project, я решил эту проблему


0

Я только начал использовать STS Eclipse, впервые используя Maven. У проекта, который я настроил, уже был свой собственный файл settings.xml. В этом случае вы захотите обновить файл settings.xml в конфигурации запуска.

  1. щелкните правой кнопкой мыши файл pom.xml и «Запуск от имени» -> «Выполнить настройки ...»

  2. где написано «Настройки пользователя», нажмите кнопку «Файл» и добавьте файл settings.xml.

  3. Я думаю, что это специфично для вашего проекта, но мои «Цели» настроены на «чистую установку», и я проверил «Пропустить тесты».


0

Эта ошибка в основном говорит о том, что maven не может прочитать определенную зависимость из локального репозитория. Это может произойти, потому что файл JAR не был загружен правильно. Итак, перейдите в локальный репозиторий maven и убедитесь, что нет файла расширения .lastUpdated .


0

Это помогло мне:

Из IDE (Red Hat CodeReady Studio в моем случае).

Windows -> Показать представление -> Терминал -> Открыть / добавить локальный терминал

Запустите команды следующим образом>

$ cd /pom-file-path/

$ mvn -U clean install


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