Fat JAR assemblies may result in JARs with duplicate files
----------------------------------------------------------

                 Key: MASSEMBLY-341
                 URL: http://jira.codehaus.org/browse/MASSEMBLY-341
             Project: Maven 2.x Assembly Plugin
          Issue Type: Bug
         Environment: Maven 2.0.8
            Reporter: Daniel Gredler


When building a fat JAR assembly (format=jar, dependencySet.unpack=true), if 
some of the dependencies contain files with the same path and name as files in 
any other dependencies and/or the current project, the generated JAR file 
contains duplicate files.

The root issue is that ZIP files allow duplicate files, and JAR files are just 
special ZIP files. However, when a JAR file contains duplicate files, the 
results are unpredictable -- there's no way to know which file "wins."

Internally, (as far as I can tell) Maven's DefaultAssemblyArchiver [2] uses an 
ArchiverManager to get an Archiver based on the format name ("jar"). This 
Archiver is probably a MavenArchiver [3], which delegates to a JarArchiver [4], 
which is a subclass of ZipArchiver [5] and AbstractZipArchiver [6]. 
AbstractZipArchiver has a protected instance variable of type String named 
"duplicate", the values of which can be one of "preserve", "fail" and "add". 
The default is "add".

I'm not sure if this needs to be fixed at the JarArchiver level (initialize the 
"duplicate" instance var to "preserve"), or at the DefaultAssemblyArchiver 
level (as was done with WAR assemblies for MNG-1274 -- see the 
createWarArchiver() method), or somewhere else.

As an example of how other projects handle this, Ant's Jar task documentation 
page [1] includes a bolded warning which describes the issue and provides the 
"duplicate" attribute, which can be set to "add", "preserve" or "fail".


[1] http://ant.apache.org/manual/CoreTasks/jar.html
[2] 
http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java
[3] http://maven.apache.org/shared/maven-archiver/xref/index.html
[4] 
http://fisheye.codehaus.org/browse/~raw,r=4612/plexus/plexus-components/trunk/plexus-archiver/src/main/java/org/codehaus/plexus/archiver/jar/JarArchiver.java
[5] 
http://fisheye.codehaus.org/browse/~raw,r=4573/plexus/plexus-components/trunk/plexus-archiver/src/main/java/org/codehaus/plexus/archiver/zip/ZipArchiver.java
[6] 
http://fisheye.codehaus.org/browse/~raw,r=4573/plexus/plexus-components/trunk/plexus-archiver/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to