2012-05-29 20 views
18

mientras construyes un archivo de guerra estoy copiando un conjunto de jarras de una ubicación a una carpeta dentro de la guerra. Mientras que los archivos se copian, sin embargo, creo que se corrompen porque los mismos archivos de clase del contenedor cuando se toman fuera de la guerra se abren con un depurador mientras no se abre después de tomar el archivo war.archivo jar se corrompe mientras construye con maven

Esta es una parte de mi pom.xml guerra donde copio los frascos

<execution> 
    <id>copy-jars</id> 
    <phase>process-resources</phase> 
    <goals> 
     <goal>copy-resources</goal> 
    </goals> 
    <configuration> 
     <outputDirectory>${basedir}/target/${project.artifactId}-${buildNumber}/somefolder</outputDirectory> 
     <resources> 
      <resource> 
       <directory>SomeSourceDirectory</directory> 
       <filtering>true</filtering> 
       <includes> 
        <include>**/**</include> 
       </includes> 
      </resource> 
     </resources> 
    </configuration> 
</execution> 

SomeSourceDirectory tiene algunos frascos y algunos otros archivos El resultado es: myWar/SomeFolder/a.jar pero cuando abro las clases dentro de este frasco en un debugger..i obtener error en WinZip que

Invalid compressed data to extract. 
Severe Error: Compressed data is invalid 

Sin embargo el mismo archivo de clase se puede ver cuando veo en la carpeta original, es decir fuera del guerra. Entonces, ¿hay un error al copiar los frascos? Gracias.

+0

¿Son iguales los frascos? Mismo tamaño de archivo, tal vez la misma suma de comprobación md5 ... – cha0site

+0

el tamaño del archivo es el mismo; sin embargo, la suma de comprobación md5 parece diferente ... he comprobado con md5.jar downlaoded desde http://activityworkshop.net/software/md5/index.html ..can ' entiendo por qué diferentes sumas de comprobación? – pranay

Respuesta

41

Eliminar <filtering>true</filtering>, corrompe los archivos jar.

+0

¡genial! Muchas gracias Emmanuel ... funcionó :) pero aún me pregunto por qué maven tiene este extraño comportamiento. ¿Por qué el filtrado es útil entonces? – pranay

+3

El filtrado es útil cuando copia recursos de texto que contienen referencias a la versión del proyecto, por ejemplo. Aplicado en archivos binarios, dañará el contenido. –

+0

gracias de nuevo :) – pranay

9

Además, puede continuar beneficio para utilizar el filtrado experta en frascos sin corromper el interior (sí sí necesito para empaquetar frascos con el interior y el uso de filtrado también)

Elegimos para excluir el cántaro de extensiones filtrados.

En la sección pluginManagement ésima de la matriz pom ponemos esta configuración

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <encoding>${project.build.sourceEncoding}</encoding> 
     <nonFilteredFileExtensions> 
     <nonFilteredFileExtension>jar</nonFilteredFileExtension> 
     <nonFilteredFileExtension>pdf</nonFilteredFileExtension> 
     <nonFilteredFileExtension>swf</nonFilteredFileExtension> 
     <nonFilteredFileExtension>zip</nonFilteredFileExtension> 
     <nonFilteredFileExtension>bz2</nonFilteredFileExtension> 
     <nonFilteredFileExtension>gz</nonFilteredFileExtension> 
     <nonFilteredFileExtension>acp</nonFilteredFileExtension> 
     <nonFilteredFileExtension>bin</nonFilteredFileExtension> 
     <nonFilteredFileExtension>odt</nonFilteredFileExtension> 
     <nonFilteredFileExtension>doc</nonFilteredFileExtension> 
     <nonFilteredFileExtension>xls</nonFilteredFileExtension> 
     </nonFilteredFileExtensions> 
    </configuration> 
    </plugin> 

Nota hemos añadido extensiones tarro, así como tipos de archivos excluidos por defecto (Maven es un zip, después de todo).

Además de evitar la corrupción del archivo, también acelera el proceso ya que no tiene que filtrar archivos grandes.

0

que tenían un error similar cuando he añadido

<copy ...> 
<fileset ... /> 
<filterchain> 
    <tokenfilter> 
     <replacestring from="..." to="..." /> 
    </tokenfilter> 
</filterchain> 
</copy> 

a mi tarea de copia en ANT. Corrompió los archivos jar al copiarlos. He resuelto esto aplicando el filtro SÓLO en los archivos de texto de destino y no en archivos jar.

Cuestiones relacionadas