2012-04-25 11 views
21

Empaqueto mi aplicación basada en la primavera con Maven:Maven genera archivos pom.xml duplicado y pom.properties en un frasco

mvn install-DskipTests -Peverything. 

Y surge algo extraño. En META-INF del jar generado, encuentro archivos duplicados pom.xml y pom.properties. ¿Alguien puede explicarlo? Gracias.

enter image description here

Aquí se extrae pom.xml

<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-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.abc.xyz</groupId> 
<artifactId>migrate-app</artifactId> 
<packaging>jar</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>migrate-app</name> 
<url>http://maven.apache.org</url> 
<dependencies> 

.. 

</dependencies> 

<profiles> 
    <profile> 
    <id>everything</id> 
    <build> 
     <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.5</source> 
      <target>1.5</target>   
     </configuration> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <skipTests>true</skipTests> 
     </configuration> 
     </plugin>    
     </plugins> 
    </build> 
    </profile> 
    </profiles> 

de salida para el comando:

mvn -version 

Apache Maven 3.0.4 (r1232337; 2012-01-17 15: 44: 56 + 0700) Hogar de Maven: C: \ apache-maven-3.0.4 \ bin .. Versión de Java: 1.6.0_30, proveedor: S un Microsystems Inc. Inicio de Java: C: \ Archivos de programa (x86) \ Java \ jdk1.6.0_30 \ jre Configuración regional predeterminada: en_US, codificación de plataforma: Cp1252 Nombre del sistema operativo: "windows 7", versión: "6.1", arco: "x 86", de la familia: "ventanas"

+0

¿Podría escribir aquí el resultado de la "versión de mvn"? –

+0

He agregado la salida. – bnguyen82

+0

gracias. Voy a buscarlo también. Ejecuto mvn versión 3 aquí y tuve el mismo comportamiento. archivos dobles dentro del contenedor. –

Respuesta

-5

No está seguro de lo que entendemos por duplicate pero el frasco creado por Maven viene con pom.xmlpom.properties y en META-INF carpeta. Consulte this section de la guía de introducción de maven.

+0

Quiero decir que hay dos archivos pom.xml y dos pom.properties. – bnguyen82

+0

Los archivos jar se basan en un formato ZIP (de hecho, puede manipular el archivo jar con utilidades ZIP) que permite entradas duplicadas en el archivo. Las entradas con el mismo nombre simplemente se sobrescriben durante el proceso de extracción. Cuando inspeccione el archivo jar creado con el combo Eclipse/m2e verá literalmente entradas duplicadas para los archivos mencionados. Lo que es realmente molesto es que esto rompe la herramienta cmdline jar (no se puede actualizar ningún archivo) –

13

Parece que este es un problema bastante común que surge de un conflicto en Eclipse, especialmente con la integración m2e-wtp.

Algunas personas indican que se puede solucionar incluyendo clean en la lista de objetivos para ejecutar, p. mvn clean package.

Además, trate de actualizar la instalación M2e y asegúrese de que no tiene varias versiones de M2e o m2eclipse (la versión pre-Indigo) instalado.

Algunas referencias a otras personas que se enfrentan a este problema:

+0

Abrí http://jira.codehaus.org/browse/MSHARED-324 para rastrear el problema en el complemento maven-archiver. Cualquier persona interesada en ver una solución en Maven debería votar por ello. –

+0

Acabo de cerrar este problema porque está corregido implícitamente por Maven JAR Plugin 2.6. –

6

Sé que este tema es un poco viejo, pero pensé Compartiría un poco de información oscura sobre este tema . Me encontré con el mismo problema, y ​​descubrí que cuando ejecuté maven con Eclipse abierto, Y mis preferencias de área de trabajo estaban configuradas para actualizar el espacio de trabajo utilizando enlaces nativos o sondeos, los archivos extra pom.xml y pom.properties se agregaron por eclipse ! Cerrar el eclipse o quitar la opción de espacio de trabajo de actualización resolvió el problema por mí. Esta fue una tarea difícil de rastrear, por lo que espero que alguien más se beneficie de esto.

14

Añadir

<build> 
    <plugins> 
    <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
     <archive> 
      <addMavenDescriptor>false</addMavenDescriptor> 
     </archive> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

a su pom.xml

+0

Esto funcionó para mí. Pero, ¿puedes explicar por qué? – spoulson

+0

Maven build agrega archivos maven a la carpeta META-INF. Si está desarrollando un applet o proyecto similar, este es un problema. La propiedad addMavenDescriptor excluye los archivos maven del jar cuando es falso. – besc

+0

Simplemente encontré este error con un proyecto que contiene un applet. Está claramente relacionado con m2e. Finalmente eliminé los descriptores maven que parecen ser la única solución para ese error ... -gracias – Rob

0

Seguimiento de la obra de Dan @ alrededor:

me trataron su solución y que aparece a trabajar - a primera vista. Sin embargo, solo está retrasando el fracaso eventual.

Parece que cada vez que se refresca el espacio de trabajo, los archivos pom.xml y pom.properties se crean en el directorio/classes. Después de eso, cualquier objetivo posterior del "paquete" incluirá los archivos duplicados en el .jar y así romper cualquier firma posterior.

Si la votación está activada, usted "falla rápidamente". Si está desactivado, puede fallar en momentos arbitrarios en versiones futuras.

Cuestiones relacionadas