[ https://jira.codehaus.org/browse/MASSEMBLY-742?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=359400#comment-359400 ]
Dawid Weiss commented on MASSEMBLY-742: --------------------------------------- Hi Kristian. The fix should be in plexus again. {code} public class PlexusIoZipFileResourceCollection extends AbstractPlexusIoArchiveResourceCollection { public static final String ROLE_HINT = "zip"; public PlexusIoZipFileResourceCollection() { } protected Iterator<PlexusIoResource> getEntries() throws IOException { File f = this.getFile(); if(f == null) { throw new IOException("The tar archive file has not been set."); } else { final ZipFile zipFile = new ZipFile(f); final Enumeration en = zipFile.getEntries(); return new Iterator() { public boolean hasNext() { return en.hasMoreElements(); } public PlexusIoResource next() { ZipArchiveEntry entry = (ZipArchiveEntry)en.nextElement(); return new ZipResource(zipFile, entry, PlexusIoZipFileResourceCollection.this.getStreamTransformer()); } public void remove() { throw new UnsupportedOperationException("Removing isn\'t implemented."); } }; } } } {code} The returned iterator should be closeable and should properly close the ZipFile field. I will attach a simple project that reproduces the problem (it works on every other run on my machine; if you enforce object finalization at JVM shutdown it'll reproduce every time). > Unclosed ZipFile warnings when ZIP archives are included > -------------------------------------------------------- > > Key: MASSEMBLY-742 > URL: https://jira.codehaus.org/browse/MASSEMBLY-742 > Project: Maven Assembly Plugin > Issue Type: Bug > Components: dependencySet > Affects Versions: 2.5.2 > Reporter: Dawid Weiss > Assignee: Kristian Rosenvold > Priority: Minor > Fix For: 2.5.3 > > > I get the following warnings at the end of Maven build: > {code} > Cleaning up unclosed ZipFile for archive C:\...foo-0.2.0-SNAPSHOT.zip > {code} > These warnings originate from assembly plugin, but in fact they're caused by > the fact that plexus resource abstraction opens up a ZipFile from > commons-compress, but never closes it. Commons-compress then force-closes all > such objects in finalize, emitting a warning. > I created a synthetic capture of the allocation stack in maven assembly, it's > here: > {code} > org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:211) > org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:193) > org.apache.commons.compress.archivers.zip.ZipFile.<init>(ZipFile.java:154) > org.codehaus.plexus.archiver.zip.PlexusIoZipFileResourceCollection.getEntries(PlexusIoZipFileResourceCollection.java:29) > org.codehaus.plexus.components.io.resources.AbstractPlexusIoArchiveResourceCollection.getResources(AbstractPlexusIoArchiveResourceCollection.java:69) > org.codehaus.plexus.components.io.resources.proxy.PlexusIoProxyResourceCollection.getResources(PlexusIoProxyResourceCollection.java:111) > org.codehaus.plexus.archiver.AbstractArchiver$1.hasNext(AbstractArchiver.java:493) > org.codehaus.plexus.archiver.dir.DirectoryArchiver.execute(DirectoryArchiver.java:71) > org.codehaus.plexus.archiver.AbstractArchiver.createArchive(AbstractArchiver.java:940) > org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver.createArchive(AssemblyProxyArchiver.java:541) > org.apache.maven.plugin.assembly.archive.DefaultAssemblyArchiver.createArchive(DefaultAssemblyArchiver.java:180) > org.apache.maven.plugin.assembly.mojos.AbstractAssemblyMojo.execute(AbstractAssemblyMojo.java:486) > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) > org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) > org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) > org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347) > org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154) > org.apache.maven.cli.MavenCli.execute(MavenCli.java:582) > org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) > org.apache.maven.cli.MavenCli.main(MavenCli.java:158) > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > java.lang.reflect.Method.invoke(Method.java:483) > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) > org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) > org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) > org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) > {code} > Hope this helps, somehow. -- This message was sent by Atlassian JIRA (v6.1.6#6162)