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