jar file gets corrupted while building with maven

16,738

Solution 1

Remove <filtering>true</filtering>, it corrupts the jar files.

Solution 2

Also, you can continue benefit to use maven filtering without corrupting jars inside.

We choose to exclude jar from filtered extensions.

In th pluginManagement section of the parent pom we put this configuration

 <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>

Note we added jar extensions as well as default maven excluded filetypes (its a zip after all).

Besides avoiding corruption of the archive it also speeds up the process as it does not have to filter large files.

Solution 3

Try Maven Assembly Plugin. It's my favourite plugin to add custom resources to a *.war file. See also Pre-defined Descriptor Files.

Solution 4

I had a similar error when I've added

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

to my copy task in ANT. It corrupted the jar files when copying them. I've solved this by applying the filter ONLY on the targeted text files and not on jar files.

Share:
16,738
pranay
Author by

pranay

I like to work on open source.

Updated on June 11, 2022

Comments

  • pranay
    pranay about 2 years

    while building a war file i am copying a set of jars from a location to a folder inside the war. While the files do get copied , however i think they get corrupted because the same class files of the jar when taken outside the war opens with a debugger while it does not open after taking from war file .

    This is a part of my war pom.xml where i copy the jars

    <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 has some jars and some other files The result is: myWar/somefolder/a.jar but when i open the classes inside this jar in a debugger..i get error in WinZip that

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

    However the same class file can be viewed when i view it in original folder i.e outside the war. So is there a mistake while copying the jars? Thanks.

  • pranay
    pranay about 12 years
    great! thanks a lot Emmanuel ..that worked :) but still wondering why does maven has this wierd behaviour?? Why is filtering useful then?
  • Emmanuel Bourg
    Emmanuel Bourg about 12 years
    Filtering is useful when you copy text resources containing references to the project version for example. Applied on binary files it will corrupt the content.
  • tobijdc
    tobijdc about 8 years
    when using the assembly plugin be aware that this setting might not be in the pom.xml, but in the associated descriptor xml file
  • Alessandro C
    Alessandro C about 4 years
    I have the same issue with antrun plugin: can you please explain how to solve that problem?
  • pooshla
    pooshla over 3 years
    Important note here, the default for the maven-resources-plugin appears to be "true" for filtering, so I needed to explicitly set filtering to "false", not just remove the line