ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stefan Bodewig <>
Subject Problem with URL imports from JARs
Date Mon, 14 Dec 2009 12:10:30 GMT
Hi all,

I recognized test failures on my Windows box that I wanted to address
before the release.  One if the failing tests is import-url-test.xml
which fails in the tearDown target because test.jar - from which we
import files - hasn't been closed and thus cannot be deleted.

Quite obviously closing a stream you obtain from a jar:file: URL will
leave the jar file open on Windows (at least using the JDK 1.4 I am
testing with).

My first idea was to copy the close-logic from URLResource over to
FileUtils and use it from ProjectHelper2 so it can close the jar file

Unfortunately this leads to other problems since the underlying classlib
code keeps track of the opened jar files but not of when they get closed
and subsequent attempts to read from a closed jar file will cause

A concrete problem occured in import-url-test.xml itself which failed in
the <jar> task.  ProjectHelper2 would have parsed
org/apache/tools/ant/antlib.xml from ant.jar and closed the
corresponding jar file after that.  The jar task tries to read Ant's
default manifest from the classpath and gets an IllegalStateException
because that ant.jar is already closed.

And there are similiar issues.  The test itself would go ahead and
import more files from the same jar as well as read a properties file -
all these things would fail.

Before going even further - like trying to use separate AntClassLoader
instances that can be cleaned up per imported JAR URL - I thought I
might better ask for ideas.

Maybe the "problem" as I see it really isn't such big a problem since
the same issue should occur for antlibs as well.  Once you've loaded an
antlib, you can't delete the jar file that contained it's descriptor as
long as the Ant process hasn't finished.  Maybe we should document this
to be true for imports from jars as well and be done?


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message