Maven: Nie można odczytać deskryptora artefaktu

258

Mam nadzieję, że ktoś może mi pomóc z problemem, z którym walczę.

Gdy próbuję zbudować projekt z terminala, pojawia się ten błąd:

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-utilsSłoik tworzony jest przez oddzielny projekt i dzielone między tym i innym projekcie (inny projekt nie buduje obaj, ale to jest w dół do innego problemu).

Jestem w stanie zbudować com.morrislgn.merchandising.common:test-data-utilsbez problemu, widzę wpis, który dokonuje w .m2lokalnym repozytorium na moim komputerze. Ponownie zindeksowałem moje repozytorium w Eclipse.

POM dla mojego projektu ma następujący wpis:

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

Co wydaje mi się poprawne - POM nie zgłasza żadnych błędów, gdy jest oglądany w Eclipse.

Czy ktoś może mi powiedzieć, czego tu brakuje lub co robię źle?

Morrislgn
źródło

Odpowiedzi:

183

Zawsze możesz spróbować mvn -U clean install

-U wymusza sprawdzenie zaktualizowanych wersji i migawek w zdalnych repozytoriach.

Gal Bracha
źródło
40
@MrPhi: Jeśli masz wtyczkę m2e, możesz użyć Maven -> „Aktualizuj projekt ...”. Następne okno dialogowe będzie miało opcję wymuszenia aktualizacji migawek i wydań.
Aaron Digulla
1
@AaronDigulla To okno dialogowe powoduje dla mnie błąd.
Jeroen
1
Aby to zadziałało, należy uruchomić komendę znajdującą się w katalogu głównym projektu
Daria,
Miałem również podobny problem. To naprawdę pomaga, a ponadto, jeśli używasz prywatnego repozytorium mvn, upewnij się, że najpierw dodasz to do ~/.m2/setting.xmlsekcji lustrzanej, a następnie po uruchomieniu mvn -U clean installupewnij się Reimport(kliknij projekt prawym przyciskiem myszy, a następnie w dolnej Mavenczęści znajduje się Reimportprzycisk ).
JACK ZHANG
1
@TomaszWaszczyk: Tak jest. 1. Windows-show view-> Terminal. 2. Dodaj terminal lokalny 3. cd PomFilePath 4. Uruchom komendę
Wisznu Dahatonde
142

Ten problem może wystąpić, jeśli masz projekty potomne, które odnoszą się do nadrzędnego systemu pom i nie zainstalowałeś go z katalogu nadrzędnego pom (uruchom mvn installz katalogu nadrzędnego). Jeden z projektów podrzędnych może zależeć od projektu rodzeństwa, a gdy przejdzie do pom pom rodzeństwa, zakończy się niepowodzeniem z powodu błędu wymienionego w pytaniu, chyba że przynajmniej raz zainstalowałeś z nadrzędnego katalogu pom.

Właśnie natrafiłem na ten problem podczas przenoszenia projektu na nowy komputer. Miałem zwyczaj uruchamiać polecenia z projektu potomnego i nie uruchomiłem instalacji na rodzicu.

bzuillsmith
źródło
13
Ponadto podczas uruchamiania mvn installna urządzeniu nadrzędnym można również dodawać -Noperacje nierekurencyjne. Spowoduje to, że maven pominie wszystkie moduły (w tym jeden, który zawodzi) i po prostu wykona installcel dla rodzica.
Jacek Prucia,
@JacekPrucia dobrze wiedzieć, że należy również zainstalować artefakt pom (jeśli twój rodzic jest pom)
Adrian
@bzuillsmith dlaczego miałbyś biec mvn installw rodzicielskiej pom. Czy nie można tego użyć tylko po to, aby można było pobrać zależność od rodzeństwa? Jeśli zdarzyło się, że poszedłeś do katalogu rodzeństwa i pobiegłeś mvn installstamtąd, aby słoik znalazł się w lokalnym repozytorium, czy to nie robi dokładnie tego samego?
user2158382,
Minęło kilka lat, odkąd korzystałem z maven, ale - Tak, wierzę, że możesz zainstalować zależności rodzeństwa jeden po drugim. Instalowanie od rodzica jest po prostu mniej pracy (mniej poleceń do pisania i uruchamiania). Mogą wystąpić przypadki w dużych projektach, w których nie chcesz instalować wszystkich projektów potomnych, w takim przypadku musisz uruchomić je indywidualnie.
bzuillsmith
Mój projekt jak ch-multip-spring \ simple-parent \ simple-model \ pom.xml, robię mvn clean install z katalogu głównego ch-multip-spring (nie tylko z simple-parent), to rozwiązało mój problem podobny do tytułu postu.
IcyBrk
104

Miał ten sam problem z IntelliJ IDEA i następujące działały.

  • Iść do File
  • Wybierz Settings
  • Wybierz Build, Execution, Deployments
  • Wybierz Build Toolsz menu rozwijanego
  • Wybierz Mavenz menu rozwijanego
  • Zaznacz Always update snapshotspole wyboru

zrzut ekranu z IntelliJ 2017.2> Preferencje / Ustawienia> Kompilacja, wykonanie, wdrożenie> Narzędzia do kompilacji> Maven> Zawsze aktualizuj migawki (pole wyboru)

główny
źródło
1
To działało dla mnie, ale nie rozumiem dlaczego - starałem się budować z linii poleceń. Czy było coś buforowanego z IntelliJ?
goodOldFashioned
Pracowałem też dla mnie! Nie mogę uwierzyć, jak frustrujące było to. Dzięki!
Ben Arena,
@ goodOldFashioned: To „zawsze aktualizuj” zastąpiło plik .... lastUpdated z lokalnego repozytorium. -U robi to samo z wiersza poleceń. Więc intellij naprawiło twoje lokalne repozytorium, a potem wiersz poleceń znów działał.
Frischling
Prosty i skuteczny
Ojonugwa Jude Ochalifu
2
po
przejrzeniu
37

Jeśli używasz Eclipse, kliknij prawym przyciskiem myszy swój projekt -> Maven -> Aktualizuj projekt . Otworzy się okno dialogowe Aktualizuj projekt Maven.

W tym oknie dialogowym zaznacz pole wyboru Wymuś aktualizację migawek / wydań i kliknij OK . (Patrz zdjęcie poniżej)

Zaktualizuj okno dialogowe projektu Maven

To zadziałało dla mnie!

IamVickyAV
źródło
36

Jeśli używasz zaćmienia, kliknij prawym przyciskiem myszy projekt -> właściwości -> Maven i upewnij się, że nie kliknięto opcji „ Rozwiąż zależności od projektów obszaru roboczego ”.

Mam nadzieję że to pomoże.

tharindu_DG
źródło
4
Mi to pasuje. Ale nie rozumiem dlaczego? Jakieś wyjaśnienie tego?
Anand
1
to nie działało dla mnie, początkowo brakowało 12 przyzwoitości, po zrobieniu tego jest teraz 74
użytkownik2044822
27

Wiem, że spóźniłem się na rozmowę, ale miałem też ten problem. Myślę, że problemem był firewall mojej firmy. Moim rozwiązaniem było odłączenie od sieci, połączenie z naszą otwartą siecią bezprzewodową, a następnie wymuszenie aktualizacji przez Eclipse. To rozwiązało wszystko.

rrs
źródło
1
Dzięki chłopaki! To działało dla mnie i oszczędzało dużo czasu.
powiedział pogan
14

Miałem ten sam problem z zaćmieniem, w którym wiersz polecenia kompilacji maven działał dobrze, ALE spróbuj tego

  • przejdź do .m2 / repository i wyczyść powiązany katalog
  • uruchom aktualizację zależności maven w środowisku Eclipse

Błąd znika ... dlaczego moja linia komend mvn działała z tymi katalogami i zaćmienie .m2eclipse nie mogło, nie mam pojęcia i to trochę do bani. Mój projekt znów działa w zaćmieniu.

Dean Hiller
źródło
na marginesie, przeszliśmy na grad .... o wiele szczęśliwszy niż mrówka i maven .... bardzo fajna konfiguracja.
Dean Hiller
Nie jestem nawet pewien, czy jest to coś związanego z Eclipse. Miałem ten sam problem z IntelliJem. Usunięcie problematycznych pakietów i ponowne uruchomienie mvn clean installdziałało
Jay
12

Miałem ten sam problem przy użyciu IntelliJ. Rozwiązałem kliknięcie prawym przyciskiem myszy pom.xml> Maven> Reimport

Rlopezo
źródło
Tak, jak życie jest takie proste. W każdym razie odpowiedź @prime zadziałała dla mnie.
Imam Bux,
10

Rozwiązałem ten problem, usuwając z folderów repozytorium, gdzie ten błąd był pokazywany wszystko oprócz plików .jar i .pom.

17 śladów
źródło
Rozwiązałem również ten sam problem, usuwając powiązane pliki w lokalnym repozytorium maven, a następnie aktualizując cały projekt.
Ad Infinitum,
8

Problemy „Nie udało się odczytać deskryptora artefaktu” zazwyczaj wskazują na problem z plikiem pom zależności w repozytorium maven. Sugeruję, abyś dokładnie sprawdził, czy nazwa pliku pom jest taka sama, jak nazwa maven oczekuje, a także by sprawdzić, czy zawartość pliku pom jest poprawna.

eaykin
źródło
1
Sprawdzanie pliku pom.xml było przydatne. Odkryłem, że mam tę samą zależność dwa razy (błąd kopiowania i wklejania). Po czyszczeniu wszystko było w porządku.
Adam Boczek
8

Dla mnie było to związane z ustawieniem „User Setting.xml” w środku

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 . 
Roshan Khandelwal
źródło
6

Mam projekt

 A/
 |--a1
 |--a2

Teraz w naszej organizacji jest inny projekt

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

(Każdy moduł a1, b1 itd. Oraz projekty nadrzędne A, B mają własne pom.xml zgodnie ze standardowymi zasadami maven nadrzędnego i podrzędnego)

Oba projekty są sprawdzane na moim lokalnym zaćmieniu (z SVN). Aktywnie pracuję nad A.

Dowiedziałem się, że w B jest dobra wspólna funkcjonalność (b4) i musiałem z niej korzystać.

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

Deweloper b4 wdrożył ten moduł b4 jako artefakt w repozytorium naszej organizacji. Uwzględniłem zależność od POM modułu, tj. Pom.xml a2. Eclipse pobrał wymagany artefakt z repozytorium i mogłem w nim zaimportować klasy.

Teraz zaczyna się problem ... Musiałem sprawdzić kod źródłowy b4 w jakimś celu, a ponieważ miałem już B wypisane na moim lokalnym zaćmieniu, zaktualizowałem go z SVN i wypisałem moduł b4. Uruchomiłem także pom.xml modułu b4 z celami takimi jak clean, package itp. Po pewnym czasie, kiedy skończyłem kodowanie, musiałem utworzyć JAR mojego modułu a2. Uruchomiłem „pakiet” na pom.xml a2 i BAM !! błędy n błędy dla modułu a2. Te błędy również nie były zbyt przyjazne dla użytkownika. Jedyną rzeczą jest to, że w dziennikach na pewno była nazwa b4.

Rozwiązanie: Po wielu godzinach próbowania wielu rozwiązań, uruchomiłem „mvn -U clean install” z konsoli w katalogu projektu mojego B (tj. W ../codebase/B). Ponieważ B jest nadrzędny, uruchomiono polecenie czystej instalacji dla wszystkich modułów, w tym b4, i przebiegło pomyślnie. Potem uruchomiłem „mvn -U clean install” dla mojego projektu nadrzędnego, którym jest A. I to zadziałało! Moduł a2 został pomyślnie skompilowany, zainstalowany (spakowany później).

Ważną kwestią było to, że jeśli b4 jest w twoim obszarze roboczym, nie tylko instaluj b4. Musisz wyczyścić i zainstalować kompletny B. Podszedłem do tego rozwiązania po przeczytaniu odpowiedzi Zuilla

EDYCJA: Jeszcze jedna rzecz, aby zauważyć, że jeśli nie miałbym projektu B sprawdzonego w środowisku lokalnym, ten problem mógł nie wystąpić. Wydaje mi się, że tak się stało, ponieważ kazałem B sprawdzić w moim lokalnym obszarze roboczym.

simpleDev
źródło
5

Wspominasz o dwóch różnych grupach com.morrislgn.merchandising.commoni com.johnlewis.jec.webpim.common. Może to jest problem.

flogratos
źródło
Dobre miejsce - nie, nie jest niestety. Skopiowałem zły znacznik z POM XML, który był powyżej znacznika, którego potrzebowałem i nie zauważyłem, co zrobiłem. Ups! Zredagowałem pytanie, aby naprawić moją głupotę!
Morrislgn,
4

Nie udało się zaktualizować za pomocą zaćmienia. Musiałem użyć mvn czystej instalacji -U (która rozwiązała wszystko).

Bezzębny Widzący
źródło
10
Gal Bracha również na to odpowiedział. Lepiej zagłosuj na roboczą odpowiedź i dodaj komentarze, jeśli to konieczne.
Brian White,
4

Dla mnie wydaje się to być problemem z zależnością POM.

Obejrzałem to przy użyciu wirtualnego repozytorium jitpack, z którym można dołączyć repozytoria github na podstawie ich adresu URL zamiast własnego POM (co w moim przypadku wydaje się być błędne).

    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
Phil Rykoff
źródło
3

Przez pewien czas miałem ten sam problem i pomimo tego mvn -U clean install jego rozwiązania problem nie został rozwiązany!

W końcu rozwiązałem problem, usuwając całość .m2 folder, a następnie ponownie uruchomiłem IDE i problem zniknął!

Czasami więc problem pojawiałby się z powodu pewnych niezgodności lub problemów w lokalnym repozytorium maven.

sakhoshdel
źródło
Próbowałem wykonać ponowną synchronizację Maven w trybie offline i całkowicie ukryłem IntelliJ. Postępowałem zgodnie z twoją radą, usunąłem .m2, a teraz działa jak urok! Dzięki!
Victor Grazi
3

W naszym przypadku błąd pojawił się z powodu nieprawidłowej zmiany nazwy groupId podczas gdy niektóre projekty w wielomodułowej konfiguracji Maven odwołują się do innych.

Mieliśmy projekt agregatora ( billing-parent) z dwoma modułami ( billing-api, billing):

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

Projekt billingzależy od billing-api. Więc w jego pom.xmlmiał:

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

Postanowiliśmy zmienić nazwę groupId od com.company.teamdo com.company.team.billing. Zastąpiliśmy starą wartość w rodzicach pom.xmli <parent>sekcjach obu modułów. Ale zapomniałem zaktualizować zależność powyżej. Mamy więc konfigurację, w której billingprojekt odwołuje się do starego billing-apiartefaktu. W końcu dziób buduje billingmoduł po pewnym czasie z błędem jak

[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>

pomimo tego, że billing-apimoduł buduje się bez błędów.

Rozwiązanie 1: zmień także nazwę groupIdw dependency.

Rozwiązanie 2: zastąpienie groupIdprzez ${project.groupId}własności takiego:

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

Wniosek. Tak więc moja rada na wypadek napotkania błędu w konfiguracji wielomodułowej może być: dokładnie sprawdzić groupIdi artifactIdzależności od sąsiednich modułów.

Lu55
źródło
2

Nawiguj przez powłokę w folderze projektu i uruchom następujące polecenie:

mvn -U clean install

Zwykle powinno to już rozwiązać problem.

Jeśli zobaczysz taki komunikat:

Nie można rozwiązać zależności dla projektu: wojna: 0.0.1-SNAPSHOT: Nie można zebrać zależności w com.sun.jersey: jersey-server: jar: 1.9

Następnie wykonaj:

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

śledzony przez:

mvn -U clean install

ponownie, aby w końcu zaktualizować swoje zależności.

Następnie wykonaj kompilację czystego maven:

maven clean install
Abhijeet Kale
źródło
1

Miałem podobny problem. W moim przypadku wersja testng w moim folderze .m2 / repositories była uszkodzona, ale kiedy go usunąłem i ponownie wykonałem aktualizację mavena, wszystko działało dobrze.

William
źródło
0

Miałem ten problem w zaćmieniu, mvn -U clean installnie działałem, ale kliknąłem projekt prawym przyciskiem myszy i wybrałem Maven-> Aktualizuj projekt.

gary69
źródło
0

Właśnie zacząłem używać STS Eclipse przy pierwszym użyciu Maven. Projekt, który skonfigurowałem, miał już swój własny plik settings.xml. W takim przypadku należy zaktualizować plik settings.xml w konfiguracji uruchamiania.

  1. kliknij prawym przyciskiem myszy plik pom.xml i „Uruchom jako” -> „Uruchom konfiguracje ...”

  2. tam, gdzie jest napisane „Ustawienia użytkownika”, kliknij przycisk Plik i dodaj plik settings.xml.

  3. Myślę, że jest to specyficzne dla twojego projektu, ale moje „Cele” są ustawione na „czystą instalację” i zaznaczyłem „Pomiń testy”.

Jose Peralez
źródło
0

Ten błąd zasadniczo mówi, że maven nie mógł odczytać określonej zależności z lokalnego repozytorium. Może się to zdarzyć, ponieważ plik jar nie został poprawnie pobrany. Przejdź do lokalnego repozytorium maven i upewnij się, że nie ma pliku rozszerzenia .lastUpdated .

Sandoval0992
źródło
0

Pomogło mi to:

Z IDE (w moim przypadku Red Hat CodeReady Studio).

Windows -> Pokaż widok -> Terminal -> Otwórz / Dodaj terminal lokalny

Uruchom polecenia w następujący sposób>

$ cd /pom-file-path/

$ mvn -U clean install

Nhlanhla Rihlapfu
źródło
-4

Rozwiązałem ten problem, zmieniając plik maven setting.xml i repozytorium

wonbin2011
źródło
To szybko się zwiększyło :)
Ad Infinitum