2012-01-28 13 views
44

Stworzyłem prosty projekt z maven-achetype-quickstart pod Eclipse Indigo, potem poszedłem do edytora pom.xml gui iw zakładce zależności dodano zależność log4j przez wyszukaj w odpowiednim oknie dialogowym. Teraz moja pom.xml wyglądaBrakujący artefakt com.sun.jdmk: jmxtools: jar: 1.2.1

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org xsd/maven-.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>mygroup</groupId> 
    <artifactId>Test_Maven_03</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Test_Maven_03</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.15</version> 
    </dependency> 
    </dependencies> 
    <dependencyManagement> 
<dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
    </dependency> 
</dependencies> 
    </dependencyManagement> 
</project> 

Eclipse mówi mój POM mają wiele problemów, takich jak

brakujących javax.jms artefaktów: JMS: jar: 1,1 pom.xml/linia Test_Maven_03 2 Maven Zależność Problem

Co to znaczy i jak wyświetlić funkcję maven automatycznego pobierania słoika.

EDIT 1 Jeśli wybiorę log4j 1.2.16 zamiast 1.2.15, otrzymuję inny błąd: Missing artifact log4j:log4j:bundle:1.2.16. Nie widzę w ogóle automatycznego zarządzania słojami.

+0

Użytkownicy SBT: '' 'LibraryDependencies + =" log4j "%" log4j "%" 1.2.15 "wyklucz (" javax.jms "," jms ")' '' – opyate

Odpowiedz

92

Nie jest już uwzględniona z powodu problemów z licencją, o ile dobrze pamiętam. Jeśli nie potrzebujesz funkcji jms, możesz wykluczyć jms z zależności log4j:

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.15</version> 
<exclusions> 
    <exclusion> 
     <groupId>com.sun.jmx</groupId> 
     <artifactId>jmxri</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>com.sun.jdmk</groupId> 
     <artifactId>jmxtools</artifactId> 
    </exclusion> 
    <exclusion> 
      <groupId>javax.jms</groupId> 
      <artifactId>jms</artifactId> 
    </exclusion> 
</exclusions> 
</dependency> 
+1

Nie chcę tego robić. Myślałem, że Maven będzie automatycznie obsługiwał słoiki. Bez Mavena wystarczy pobrać plik jar log4j i umieścić go na ścieżce klas. Z Mavenem powinienem zgadnąć o licencjonowaniu ... –

+0

Maven pobierze dla ciebie zależne słoiki i umieści je w ścieżce klasy, ale ten słoik został usunięty z repozytorium, spójrz na ten wpis: http://stackoverflow.com/questions/4908651/help-the-following-artifacts-could-not-be-resolved-javax-jmsjmsjar1-1 – Sbhklr

+0

@ SuzanCioc Naprawdę nie prawda; zależność jest zależnością, niezależnie od tego, czy zarządzasz nią ręcznie, czy też pozwalasz zarządzać nią innym. Chociaż nie jestem pewien, dlaczego narzeka na brakujące zależności; powinien pobrać go z pakietu geronimo. –

11

Użyj Log4J 1.2.16 (the one I linked to in your earlier question); nie ma starszej zależności JMX i zamiast tego otrzymuje ją z Geronimo.

+0

Najpierw próbowałem wersji 1.2.16, ale dostałem kolejny błąd ("Brak logu artefakt: log4j: pakiet: 1.2.16"). Właśnie dlatego zacząłem wypróbowywać inne wersje. W każdym razie nie widzę tutaj automatyzacji. Jeśli Maven zapewni taką automatyzację, powie wszystko o zależnościach IMHO. –

+0

@ SuzanCioc Z [ten pom.xml] (https://gist.github.com/1695599) i Maven 3 działa dobrze; zrywasz rzeczy na dwie części bez żadnego powodu. Tylko dlatego, że nie możesz obecnie uruchomić Mavena, nie oznacza to, że nie działa. –

+0

@ SuzanneCioc Działa dobrze również z twoim pom. –

36

Zmień wersję log4j na 1.2.16.

Metadane dla wersji 1.2.15 są nieprawidłowe, ponieważ zostały wykryte, ponieważ w centralnym repozytorium brakuje zależności. Istnieje jednak polityka nie zmieniająca artefaktów lub metadanych w centralnym repozytorium maven, ponieważ może to prowadzić do tego, że budowle będą niepowtarzalne. Oznacza to, że kompilacja może zachowywać się inaczej, jeśli artefakt lub jego metadane ulegną zmianie.

Powodem jest to, że lepiej jest pracować nad złymi metadanymi, niż powodować nieodtwarzalne kompilacje.

Oczywiście lepiej, jeśli opiekunowie projektu są bardziej ostrożni w odniesieniu do metadanych przesyłanych do centrali.

+0

Jestem nowy w Maven i myślałem, że zapewnia on automatyczne zarządzanie zależnością JAR. Ale jak widzę, tak nie jest. Jeśli wybiorę 1.2.16, otrzymam kolejny błąd (zmieni się teraz mój wpis). Jaki jest cel Mavena? Czy ręczne pobieranie słoików nie jest łatwiejsze niż dochodzenie policyjne każdego Maven? –

+0

@SuzanCioc Nie ma sposobu, aby ręczne zarządzanie zależnościami przechodniów było łatwiejsze niż przy użyciu narzędzia; nie bądź śmieszny. Prawdziwy projekt może mieć sto zależności - w jaki sposób będziesz śledził te zależności ręcznie? Kiedy coś ulepszysz ?! Czy to * 100% * skuteczne? Nie zawsze. Geez. –

+0

Więc nie ma prostego sposobu, aby zobaczyć pracę Mavena? Może być widoczny tylko wtedy, gdy setki słoików, prawda? –

1

Powyższe odpowiedzi (z wyjątkiem JMX) są w porządku, o ile nie są potrzebne żadne zależności JMX. Jednak nigdy nie będzie można pobrać plików .jar zależności JMX ze standardowego repozytorium maven. Zacytować Jörg Schaible-3 at nabble.com:

This is normal and it will stay so, because Sun/Oracle never granted distribution rights for those artifacts as separate downloads. You will have to download them from Oracle, accepting their license, and add them to a local repository manager.

Dlatego, jeśli chcesz korzystać z JMX, trzeba będzie pobrać odpowiedni folder jmx zip z Oracle's website.

Powiązane problemy