From dddcf551a908df7a6f9ccb7db4b49ce441844375 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Tue, 26 Sep 2000 11:05:46 +0000 Subject: [PATCH] Loading tasks from a ClassLoader other than the default one now works on JDK 1.1 as well. Added org.apache.tools.ant to the list of packages that need to be loaded via the system class loader as the loaded class wouldn't be an instance of Task (loaded by default loader) otherwise. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268038 13f79535-47bb-0310-9956-ffa450edef68 --- src/main/org/apache/tools/ant/AntClassLoader.java | 4 ++-- src/main/org/apache/tools/ant/Project.java | 6 +++--- .../org/apache/tools/ant/taskdefs/Taskdef.java | 15 +++++++++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java index e9cedf16b..99a4b0fc7 100644 --- a/src/main/org/apache/tools/ant/AntClassLoader.java +++ b/src/main/org/apache/tools/ant/AntClassLoader.java @@ -115,7 +115,7 @@ public class AntClassLoader extends ClassLoader { /** * Create a classloader for the given project using the classpath given. * - * @param project the project to ehich this classloader is to belong. + * @param project the project to which this classloader is to belong. * @param classpath the classpath to use to load the classes. */ public AntClassLoader(Project project, Path classpath, boolean systemFirst) { @@ -129,7 +129,7 @@ public class AntClassLoader extends ClassLoader { * * All subpackages are also included. * - * @param packageRoot the root of akll packages to be included. + * @param packageRoot the root of all packages to be included. */ public void addSystemPackageRoot(String packageRoot) { systemPackages.addElement(packageRoot + "."); diff --git a/src/main/org/apache/tools/ant/Project.java b/src/main/org/apache/tools/ant/Project.java index 20b25552a..8457a378a 100644 --- a/src/main/org/apache/tools/ant/Project.java +++ b/src/main/org/apache/tools/ant/Project.java @@ -452,10 +452,10 @@ public class Project { String msg = " +Task: " + taskType; log (msg, MSG_DEBUG); return task; - } catch (Exception e) { + } catch (Throwable t) { String msg = "Could not create task of type: " - + taskType + " due to " + e; - throw new BuildException(msg); + + taskType + " due to " + t; + throw new BuildException(msg, t); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java index 3f0361f1f..1c0b51ce8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java +++ b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java @@ -95,7 +95,14 @@ public class Taskdef extends Task { try { ClassLoader loader = null; if (classpath != null) { - loader = new AntClassLoader(project, classpath, false); + AntClassLoader al = new AntClassLoader(project, classpath, + false); + al.addSystemPackageRoot("org.apache.tools.ant"); + if (project.getJavaVersion().startsWith("1.1")) { + // JDK > 1.1 adds these by default + al.addSystemPackageRoot("java"); + } + loader = al; } else { loader = this.getClass().getClassLoader(); } @@ -110,7 +117,11 @@ public class Taskdef extends Task { } catch (ClassNotFoundException cnfe) { String msg = "taskdef class " + value + " cannot be found"; - throw new BuildException(msg, location); + throw new BuildException(msg, cnfe, location); + } catch (NoClassDefFoundError ncdfe) { + String msg = "taskdef class " + value + + " cannot be found"; + throw new BuildException(msg, ncdfe, location); } }