From f1bfa329163db7a4992c25741e2d2db243a69fa0 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Wed, 18 Jul 2001 03:16:05 +0000 Subject: [PATCH] More classloader improvements git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269353 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/AntClassLoader.java | 41 +++++++++---------- .../apache/tools/ant/taskdefs/Available.java | 3 ++ .../tools/ant/taskdefs/ExecuteJava.java | 1 + 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java index 5aace35b9..81df31ef2 100644 --- a/src/main/org/apache/tools/ant/AntClassLoader.java +++ b/src/main/org/apache/tools/ant/AntClassLoader.java @@ -629,10 +629,6 @@ public class AntClassLoader extends ClassLoader implements BuildListener { return useParentFirst; } - - - - /** * Finds the resource with the given name. A resource is * some data (images, audio, text, etc) @@ -730,22 +726,18 @@ public class AntClassLoader extends ClassLoader implements BuildListener { } } else { - ZipFile zipFile = null; - try { + ZipFile zipFile = (ZipFile)zipFiles.get(file); + if (zipFile == null) { zipFile = new ZipFile(file); - - ZipEntry entry = zipFile.getEntry(resourceName); - if (entry != null) { - try { - return new URL("jar:file:"+file.toString()+"!/"+entry); - } catch (MalformedURLException ex) { - return null; - } - } + zipFiles.put(file, zipFile); } - finally { - if (zipFile != null) { - zipFile.close(); + + ZipEntry entry = zipFile.getEntry(resourceName); + if (entry != null) { + try { + return new URL("jar:file:"+file.toString()+"!/"+entry); + } catch (MalformedURLException ex) { + return null; } } } @@ -937,10 +929,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { } } - public void buildStarted(BuildEvent event) { - } - - public void buildFinished(BuildEvent event) { + public void cleanup() { pathComponents = null; project = null; for (Enumeration e = zipFiles.elements(); e.hasMoreElements(); ) { @@ -952,6 +941,14 @@ public class AntClassLoader extends ClassLoader implements BuildListener { // ignore } } + zipFiles = new Hashtable(); + } + + public void buildStarted(BuildEvent event) { + } + + public void buildFinished(BuildEvent event) { + cleanup(); } public void targetStarted(BuildEvent event) { diff --git a/src/main/org/apache/tools/ant/taskdefs/Available.java b/src/main/org/apache/tools/ant/taskdefs/Available.java index 6d7124254..e001f14c6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Available.java +++ b/src/main/org/apache/tools/ant/taskdefs/Available.java @@ -164,6 +164,9 @@ public class Available extends Task { } this.project.setProperty(property, value); + if (loader != null) { + loader.cleanup(); + } } private boolean checkFile() { diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java index 629f64134..3133bb9a7 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java @@ -145,6 +145,7 @@ public class ExecuteJava { } finally { if (loader != null) { loader.resetThreadContextLoader(); + loader.cleanup(); } if (sysProperties != null) { sysProperties.restoreSystem();