diff --git a/WHATSNEW b/WHATSNEW index 4f2b9f7e4..a8c62f44c 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -40,6 +40,11 @@ Fixed bugs: explicitly disable caching to avoid problems with reloading jars. Bugzilla Report 54473 + * AntClassloader will now ignore files that are part of the classpath but + not valid zip files when scanning for resources. It used to throw + an exception. + Bugzilla Report 53964 + Other changes: -------------- diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java index 7be318b25..58351f9f2 100644 --- a/src/main/org/apache/tools/ant/AntClassLoader.java +++ b/src/main/org/apache/tools/ant/AntClassLoader.java @@ -41,6 +41,7 @@ import java.util.jar.Attributes.Name; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.Manifest; +import java.util.zip.ZipException; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.util.CollectionUtils; import org.apache.tools.ant.util.FileUtils; @@ -1003,7 +1004,19 @@ public class AntClassLoader extends ClassLoader implements SubBuildListener { } else { if (jarFile == null) { if (file.exists()) { - jarFile = new JarFile(file); + try { + jarFile = new JarFile(file); + } catch (ZipException notAJar) { + // raised if a file that is not a ZIP + // happens to be part of the classpath - + // this obviously cannot contain the + // resource + String msg = "CLASSPATH element " + file + + " is not a JAR."; + log(msg, Project.MSG_WARN); + System.err.println(msg); + return null; + } jarFiles.put(file, jarFile); } else { return null; diff --git a/src/tests/antunit/taskdefs/optional/junit/junit-test.xml b/src/tests/antunit/taskdefs/optional/junit/junit-test.xml index c3efbeca5..873ce0e0b 100644 --- a/src/tests/antunit/taskdefs/optional/junit/junit-test.xml +++ b/src/tests/antunit/taskdefs/optional/junit/junit-test.xml @@ -345,4 +345,24 @@ public class BTest extends TestCase { + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/junit/org/apache/tools/ant/AntClassLoaderTest.java b/src/tests/junit/org/apache/tools/ant/AntClassLoaderTest.java index 32503ac21..963fa7b19 100644 --- a/src/tests/junit/org/apache/tools/ant/AntClassLoaderTest.java +++ b/src/tests/junit/org/apache/tools/ant/AntClassLoaderTest.java @@ -168,13 +168,13 @@ public class AntClassLoaderTest extends BuildFileTest { System.setErr(err); loader.getResource("foo.txt"); String log = getLog(); - int startMessage = log.indexOf("Unable to obtain resource from "); + int startMessage = log.indexOf("CLASSPATH element "); assertTrue(startMessage >= 0); - assertTrue(log.indexOf("foo.jar", startMessage) > 0); + assertTrue(log.indexOf("foo.jar is not a JAR", startMessage) > 0); log = errBuffer.toString(); - startMessage = log.indexOf("Unable to obtain resource from "); + startMessage = log.indexOf("CLASSPATH element "); assertTrue(startMessage >= 0); - assertTrue(log.indexOf("foo.jar", startMessage) > 0); + assertTrue(log.indexOf("foo.jar is not a JAR", startMessage) > 0); } finally { System.setErr(sysErr); }