2012-01-28 9 views
44

He creado un proyecto simple de maven-achetype-quickstart en Eclipse Indigo, luego fui al editor de pom.xml gui y en la pestaña dependencias agregué la dependencia log4j por buscar en el diálogo apropiado. Ahora mi pom.xml pareceArtefacto perdido 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 mi POM tiene muchos problemas como

javax.jms artefacto que faltan: JMS: jar: 1.1 pom.xml/línea Test_Maven_03 2 Maven Dependencia Problema

¿Qué significa y cómo ver la función de maven de descarga automática de jar?

EDIT 1 Si selecciono log4j 1.2.16 lugar de 1.2.15, me sale otro error: Missing artifact log4j:log4j:bundle:1.2.16. Por lo tanto, no veo ninguna gestión de jar automática.

+0

Usuarios de SBT: '' libraryDependencies + = "log4j"% "log4j"% "1.2.15" exclude ("javax.jms", "jms") '' ' – opyate

Respuesta

92

Ya no está incluido debido a problemas de licencia si no recuerdo mal. Si usted no necesita la funcionalidad JMS puede excluir JMS de log4j dependencia:

<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

No quiero hacer esto. Estaba pensando que Maven manejará los frascos automáticamente. Sin Maven, simplemente descargaría log4j jar y lo pondría en classpath. Con Maven, debería adivinar sobre la concesión de licencias ... –

+0

Maven descargará los archivos jar dependientes por usted y los colocará en la ruta de la clase, pero este contenedor se eliminó del repositorio, eche un vistazo a esta publicación: http://stackoverflow.com/questions/4908651/help-the-following-artifacts-could-not-be-resolved-javax-jmsjmsjar1-1 – Sbhklr

+0

@SuzanCioc No es realmente cierto; una dependencia es una dependencia, independientemente de si la administra manualmente o deja que otra persona la administre. Aunque no estoy seguro de por qué se queja de una dependencia faltante; debería obtenerlo del paquete geronimo. –

11

Uso Log4J 1.2.16 (the one I linked to in your earlier question); no tiene la antigua dependencia de JMX y la obtiene de Geronimo en su lugar.

+0

Probé 1.2.16 primero como dijiste, pero obtuve otro error ('Artefacto faltante log4j: log4j: paquete: 1.2.16'). Es por eso que comencé a probar otras versiones. De todos modos, no veo automatización aquí. Si Maven proporcionara tal automatización, diría todo sobre las dependencias en mi humilde opinión. –

+0

@SuzanCioc Con [este pom.xml] (https://gist.github.com/1695599) y Maven 3 funciona bien; estás dividiendo cosas en dos partes sin ninguna razón que pueda decir. El hecho de que no pueda hacer funcionar a Maven no significa que no funcione. –

+0

@SuzanCioc Funciona bien con tu pom también. –

36

Cambie la versión de log4j a 1.2.16.

Los metadatos para 1.2.15 son incorrectos, como ha descubierto, porque las dependencias faltan del repositorio central. Sin embargo, existe una política de no cambiar artefactos o metadatos en el repositorio central de maven, ya que esto puede llevar a que las construcciones sean irrepetibles. Es decir, una compilación podría comportarse de manera diferente si un artefacto o sus metadatos cambiaran.

El razonamiento es que es mejor trabajar con metadatos incorrectos que provocar compilaciones irreproducibles.

Es mejor, por supuesto, si los responsables del proyecto son más cuidadosos con los metadatos que cargan en la central.

+0

Soy nuevo en Maven y pensaba que proporciona administración automática de dependencias JAR. Pero como veo, no es así. Si selecciono 1.2.16 obtengo otro error (editaré mi publicación ahora). Entonces, ¿cuál es el propósito de Maven? ¿No es más fácil descargar frascos manualmente que hacer una investigación policial de cada Maven? –

+0

@SuzanCioc No hay forma de que la administración manual de la dependencia transitiva sea más fácil que usar una herramienta; no seas ridículo Un proyecto real puede tener cientos de dependencias. ¿Cómo rastreará esas dependencias a mano? Cuando actualizas algo ?! ¿Es * 100% * efectivo? No siempre. Geez. –

+0

Entonces, ¿no hay una manera simple de ver a Maven trabajar? Puede ser visible solo si hay cientos de jarras, ¿verdad? –

1

Las respuestas anteriores (excluyendo JMX) están bien, siempre que no necesite ninguna de las dependencias JMX. Sin embargo, nunca podrá descargar los archivos .jar de las dependencias JMX de un repositorio maven estándar. Para citar 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.

Por lo tanto, si desea utilizar JMX, tendrá que descargar la carpeta jmx postal respectiva de Oracle's website.

Cuestiones relacionadas