2012-04-05 19 views
9

Jestem nowy dla Mavena i zmagam się z dodawaniem zależności. Próbuję przekonwertować istniejący projekt Maven, a po dodaniu zależności do wszystkich słoików w moim odwołuje bibliotek, ja dostaję komunikat o błędzie o zaginionych artefaktów:Znalezienie brakujących artefaktów Maven

Missing artifact stax:stax:jar:1.0  
Missing artifact clover:clover:jar:1.3-rc4 
Missing artifact log4j:log4j:bundle:1.2.16 
Missing artifact stax:stax-ri:jar:1.0 

Po przeczytaniu tego postu: How to handle Maven missing artifact errors? , wygląda na to, że muszę ręcznie pobrać te słoiki i dodać je do mojego lokalnego repozytorium maven. Moje pytanie brzmi: jak znaleźć te słoiki? Próbowałem googlować i mogę znaleźć słoiki, które mają podobne imiona, ale nie dokładnie takie jak te, więc nie jestem pewien, czy są one odpowiednimi słoikami.

Jakieś wskazówki dotyczące radzenia sobie z tym problemem? Słoik log4j jest jedynym wymienionym jawnie w przywoływanych bibliotekach mojego oryginalnego projektu, więc domyślam się, że inne są wymagane przez inne słoiki, które mam, i nie wiem, gdzie je znaleźć lub jakie są ich dokładne nazwy powinno być.

Dzięki!

+0

Jeśli używasz programu maven i musisz ręcznie pobierać artefakty, robisz coś poważnie nie tak. Opublikuj swój pom.xml lub odpowiednie jego części. – j13r

+0

Tak też myślałem ... POM utworzony przez wtyczkę Eclipse m2e miał kilka problemów, zobacz poniżej moją odpowiedź na opis problemów. – matthewb

Odpowiedz

21

Dziękuję wszystkim za odpowiedź. Faktyczną przyczyną problemu jest to, że dla każdego z tych 3 brakujących artefaktów, z jakiegoś powodu, kiedy Maven pobrał je do mojego lokalnego repozytorium, .lastUpdated został dołączony na końcu słoika. Na przykład stax-1.0.jar.lastUpdated. Z tego powodu Maven nie mógł znaleźć stax-1.0.jar.

Aby rozwiązać ten problem, musiałem ręcznie pobrać plik stax-1.0.jar, a następnie zainstalować go w lokalnym repozytorium maven w tym samym miejscu, co plik pomieszany, aby Maven mógł go znaleźć. (Na przykład, używając polecenia:

mvn install:install-file -Dfile=<path-to-file>/stax-1.0.jar   
-DgroupId=stax -DartifactId=stax -Dversion=1.0 -Dpackaging=jar 

stosując te same dokładnie GroupID i artifactId jako istniejącego, niewłaściwego pliku było kluczowe znaczenie dla Maven, aby go wybrać

+1

dzięki za udostępnienie rozwiązania. Dodam to do mojego lokalnego repozytorium mózgu, kiedy to się stanie. lol. Istnieje również możliwość usunięcia katalogów repozytorium i konieczności sprawdzenia i odzyskania plików. To działało dla mnie w przeszłości! –

+0

@MikeMcMahon mówisz, że bezpieczny system będzie mógł znaleźć katalog repozytoriów '.m2' i go usunąć, aby * zmusić * Mavena do ponownego znalezienia/ponownego pobrania bibliotek? – mmcrae

+0

@mmcrae yes - zazwyczaj znajduje się w 'C: \ users \ \ .m2 \ repository' lub' documents and settings' dla starszego systemu Windows (nix powinno być '/ home//.m2 /'). Stamtąd można usunąć folder repozytorium i pozwolić Mavenowi na ponowne pobranie wszystkich twoich zależności z większego maven repo. Historycznie, ale z pewnością nie tak często, zależności mogą zostać spaczone lub uszkodzone. To pozwoli mavenowi na ponowne pobranie i odbudowanie repozytorium. –

1

Jest bardziej prawdopodobne, że definicja POM nie jest poprawna dla log4j. Wszystko, co odnosi się do log4j, powinno być łatwo dostępne w maven.

Ponadto, jeśli znasz nazwę pakietu (takich jak log4j) prawie zawsze można zrobić szybkie wyszukiwanie google „[wiązka nazwa] Maven pom” ciągu pierwszych kilku hitów należy albo uzyskać maven repo zawierające krótki opis, jak go uwzględnić, lub rzeczywistą witrynę dla słoika z wiązaniami i instrukcje dla maven.

Na przykład log4j:

<dependencies> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 
</dependencies> 

Czasami jednak wystarczy, aby określić repozytorium, aby znaleźć pozycję (jeśli nie jest obsługiwana w większych repozytoria maven)

można określić nowe repozytorium, takie jak:

<repositories> 
    <repository> 
     <id>Java.Net</id> 
     <url>http://download.java.net/maven/2/</url> 
    </repository> 
</repositories> 

Wreszcie, kiedy absolutnie nie możesz znaleźć artefaktu, który już masz p dla Ciebie (zazwyczaj jest to prawdziwe w odniesieniu do własnych słoików i czy kierowców, że nie można zawierać z projektem) można mieć użytkownik ręcznie zainstalować element poprzez linię poleceń

mvn zainstalować: zainstalować plik -DgroupId = [ group-id] -DartifactId = [artefakt-id] -Dversion = [wersja] -dfile =/ścieżka/to/file/-Dpackaging = [typ]

następnie można odwoływać w pliku maven przy użyciu informacji opisanych powyżej:

Na przykład Mam niestandardowe odwołanie do salesforce.com pr oject

mvn zainstalować: instalacji plik -DgroupId = com.salesforce -DartifactId = WSC -Dversion = 22 -dfile = \ tsclient \ H \ rozwój \ Java \ WSC-22.słoik -Dpackaging = słoik

Aby uzyskać do niego dostęp w Maven:

<dependency> 
    <groupId>com.salesforce</groupId> 
    <artifactId>wsc</artifactId> 
    <version>22</version> 
</dependency> 

Wreszcie, można znaleźć słoiki (lub ich maven INFO) na swoich stronach internetowych (proszę pamiętać, ja tylko opierając je linki poza nazwami słoiku, to nie może być rzeczywiste strony internetowe, oraz sans lOG4J który znam się za prawidłowe)

Stax

Clover

Log4j

+0

Tak, mój POM (który został utworzony automatycznie przez wtyczkę Eclipse m2e) był niepoprawny dla Log4j (i innych problematycznych artefaktów, patrz odpowiedź poniżej). W przypadku Log4j pod właściwością "typ" podano "pakiet". Kiedy to usunąłem, zadziałało. – matthewb

1

Zastosowanie maven search lub mvnrepository.com. Jeśli nie możesz znaleźć zastosowanie google szuka słoiku w innych repozytoriów publicznych, na przykład dla STAX:

maven stax-ri pom

Mój pierwszy wynik to:

http://maven.nuxeo.org/nexus/content/groups/public/stax/stax-ri/1.0/

innych repozytoriów publicznej:

http://download.java.net/maven/2

http://download.java.net/maven/1

http://repository.codehaus.org

http://repository.jboss.org/nexus/content/groups/public-jboss

http://maven.springframework.org/release

2

można znaleźć zależnościami witrynach wyszukiwania pod maven.apache.org. Idź po lewej stronie Nawigacja Menü wpis FAQ (oficjalna) i Thun do końca strony.

+1

lub bezpośrednio przez http://maven.apache.org/general.html#How_to_find_dependencies –

0

Twój problem może być coś robić. MNG-4142. Ten błąd oznacza, że ​​Maven nie pobierze nową migawkę jeśli localCopy jest ustawiony na true w artefaktu maven-metadata-local.xml.

Należy pamiętać, że tytuł tego błędu jest nieco mylące, więc jest praca przeczytaniu komentarzy.

Można by pomyśleć, że użycie flagi -U z maven rozwiązałoby ten problem, ale najwyraźniej tak nie jest.

Obecne obejście polega na wyszukiwaniu wszystkich instancji maven-metadata-local.xml i zmianie wartości localCopy na false.

0

Rozwiązałem ten problem, zmieniając wersję log4j z 1.2.15 na 1.2.16.

0

Może to być również przyczyną dom4j. Ten sam błąd wystąpił, gdy używam następujących ustawień.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>20040902.021138</version> 
</dependency> 

Po przejściu na poniższe, błąd zniknął.

<dependency> 
    <groupId>dom4j</groupId> 
    <artifactId>dom4j</artifactId> 
    <version>1.6.1</version> 
</dependency> 
1

można spróbować dodać nowe repozytoria do pom.xml

<repositories> 
    <repository> 
    <id>java.net</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
     <repository> 
     <id>jboss</id> 
     <url>http://repository.jboss.com/maven2</url> 
</repository> 
</repositories> 
1

Po kilku dniach ten głupi błąd mnie denerwowala, znalazłem następujące article

Autor opisuje, że istnieje repozytorium obszaru roboczego, które może być nieaktualne. W moim przypadku pomógł tylko zaimportować prawidłowe wtyczki. Repozytorium obszaru roboczego zostało zaktualizowane i wszystko jest w porządku.

Powiązane problemy