2012-01-28 10 views
44

Ho creato un progetto semplice da maven-achetype-quickstart in Eclipse Indigo, poi sono passato a pom.xml gui editor e nella scheda dipendenze è stata aggiunta la dipendenza log4j da cerca nella finestra di dialogo appropriata. Ora il mio pom.xml sembraManufatto mancante 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 dice il mio POM hanno molti problemi come

mancanti javax.jms artefatto: JMS: vaso: 1.1 pom.xml/linea 2 Test_Maven_03 Maven Dipendenza Problema

Che cosa significa e come visualizzare la funzione Maven del download automatico di jar.

EDIT 1 Se seleziono log4j 1.2.16 invece del 1.2.15, ottengo un altro errore: Missing artifact log4j:log4j:bundle:1.2.16. Quindi non vedo alcuna gestione automatica del barattolo.

+0

Utenti SBT: '' 'libraryDependencies + =" log4j "%" log4j "%" 1.2.15 "escludi (" javax.jms "," jms ")' '' – opyate

risposta

92

Non è più incluso a causa di problemi di licenza se non ricordo male. Se non hai bisogno di funzionalità JMS è possibile escludere JMS da log4j dipendenza:

<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

Non voglio farlo. Stavo pensando che Maven gestirà i barattoli automaticamente. Senza Maven vorrei solo scaricare jar log4j e metterlo su classpath. Con Maven dovrei indovinare sulle licenze ... –

+0

Maven scaricherà i jar dipendenti per te e lo metterà nel percorso della classe, ma questo jar è stato rimosso dal repository, dai un'occhiata a questo post: http://stackoverflow.com/questions/4908651/help-the-following-artefatti-could-not-beved-javax-jmsjmsjar1-1 – Sbhklr

+0

@SuzanCioc Non proprio vero; una dipendenza è una dipendenza, indipendentemente dal fatto che la gestisci manualmente o che venga gestita da qualcos'altro. Anche se non sono sicuro del motivo per cui si lamenta di una dipendenza mancante; dovrebbe ottenerlo dal pacchetto geronimo. –

11

Usa Log4J 1.2.16 (the one I linked to in your earlier question); non ha la dipendenza JMX più vecchia e invece la ottiene da Geronimo.

+0

Ho provato prima il 1.2.16 come hai detto, ma ho ricevuto un altro errore ('Mancato log4j: log4j: bundle: 1.2.16'). Questo è il motivo per cui ho iniziato a provare altre versioni. Comunque non vedo l'automazione qui. Se Maven fornisse una tale automazione, direbbe tutto sulle dipendenze IMHO. –

+0

@SuzanCioc Con [questo pom.xml] (https://gist.github.com/1695599) e Maven 3 funziona correttamente; stai rompendo roba in due pezzi senza motivo che posso dire. Solo perché attualmente non sei in grado di far funzionare Maven non significa che non funzioni. –

+0

@SuzanCioc Funziona bene anche con il tuo pom. –

36

Modificare la versione di log4j in 1.2.16.

I metadati per 1.2.15 non sono corretti, come è stato rilevato, poiché le dipendenze mancano dal repository centrale. Tuttavia, vi è una politica di non modificare artefatti o metadati nel repository centrale di Maven, poiché ciò può portare a costrizioni che sono irripetibili. Cioè, una build potrebbe comportarsi in modo diverso se un artefatto oi suoi metadati cambiano.

Il ragionamento è che è meglio aggirare i metadati non validi che generare build non riproducibili.

È meglio, ovviamente, se i manutentori del progetto fanno più attenzione ai metadati che caricano in centrale.

+0

Sono nuovo di Maven e pensavo che fornisse la gestione della dipendenza JAR automatica. Ma come vedo, no. Se seleziono 1.2.16 ottengo un altro errore (modificherò il mio post ora). Allora, qual è lo scopo di Maven? Non è più semplice scaricare i vasi manualmente rispetto alle indagini della polizia su ciascun Maven che sta dando il calcio? –

+0

@SuzanCioc Non c'è modo di fare in modo che la gestione della dipendenza transitiva manuale sia più semplice dell'utilizzo di uno strumento; non essere ridicolo Un vero progetto può avere un centinaio di dipendenze: come gestirai manualmente queste dipendenze? Quando aggiorni qualcosa ?! È * 100% * efficace? Non sempre. Accidenti. –

+0

Quindi non c'è un modo semplice per vedere Maven funzionare? Può essere visibile solo se centinaia di barattoli, giusto? –

1

Le risposte sopra (escluso JMX) vanno bene, purché non siano necessarie le dipendenze JMX. Tuttavia, non sarà mai possibile scaricare i file .jar delle dipendenze JMX da un repository standard di Maven. Per citare 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.

Pertanto, se si desidera utilizzare JMX, è necessario scaricare il rispettiva cartella JMX zip da Oracle's website.

Problemi correlati