Return-Path: Mailing-List: contact ant-dev-help@jakarta.apache.org; run by ezmlm Delivered-To: mailing list ant-dev@jakarta.apache.org Received: (qmail 30419 invoked by uid 500); 17 Feb 2001 14:52:48 -0000 Delivered-To: apmail-jakarta-ant-cvs@apache.org Received: (qmail 30416 invoked by uid 1142); 17 Feb 2001 14:52:48 -0000 Date: 17 Feb 2001 14:52:48 -0000 Message-ID: <20010217145248.30415.qmail@apache.org> From: conor@apache.org To: jakarta-ant-cvs@apache.org Subject: cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs ExecuteJava.java conor 01/02/17 06:52:48 Modified: src/main/org/apache/tools/ant Tag: ANT_13_BRANCH AntClassLoader.java src/main/org/apache/tools/ant/taskdefs Tag: ANT_13_BRANCH ExecuteJava.java Log: If a classpath is given to a java task, it is now used exclusively. So if a class exists on the base class loader and not on the given classpath, a ClassNotFoundException will be raised. The java.* and javax.* hierarchies are exempt. Setting build.sysclasspath="first" or "last" will still allow the system classpath be picked up. PR: 630 Revision Changes Path No revision No revision 1.14.2.1 +19 -0 jakarta-ant/src/main/org/apache/tools/ant/AntClassLoader.java Index: AntClassLoader.java =================================================================== RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/AntClassLoader.java,v retrieving revision 1.14 retrieving revision 1.14.2.1 diff -u -r1.14 -r1.14.2.1 --- AntClassLoader.java 2001/02/04 02:34:28 1.14 +++ AntClassLoader.java 2001/02/17 14:52:47 1.14.2.1 @@ -103,6 +103,12 @@ */ private Vector loaderPackages = new Vector(); + /** + * This flag indicates that the classloader will ignore the base + * classloader if it can;t find a class. + */ + private boolean ignoreBase = false; + private static Method getProtectionDomain = null; private static Method defineClassProtectionDomain = null; static { @@ -143,7 +149,17 @@ this(project, classpath); this.systemFirst = systemFirst; } + + /** + * Set this classloader to run in isolated mode. In isolated mode, classes not + * found on the given classpath will not be referred to the base class loader + * but will cause a classNotFoundException. + */ + public void setIsolated(boolean isolated) { + ignoreBase = isolated; + } + /** * Add a package root to the list of packages which must be loaded on the * system loader. @@ -354,6 +370,9 @@ project.log("Class " + classname + " loaded from ant loader", Project.MSG_DEBUG); } catch (ClassNotFoundException cnfe) { + if (ignoreBase) { + throw cnfe; + } theClass = findBaseClass(classname); project.log("Class " + classname + " loaded from system loader", Project.MSG_DEBUG); } No revision No revision 1.7.2.1 +2 -1 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java Index: ExecuteJava.java =================================================================== RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -u -r1.7 -r1.7.2.1 --- ExecuteJava.java 2001/01/03 14:18:30 1.7 +++ ExecuteJava.java 2001/02/17 14:52:47 1.7.2.1 @@ -119,7 +119,8 @@ if (classpath == null) { target = Class.forName(classname); } else { - AntClassLoader loader = new AntClassLoader(project, classpath); + AntClassLoader loader = new AntClassLoader(project, classpath, false); + loader.setIsolated(true); target = loader.forceLoadClass(classname); } final Method main = target.getMethod("main", param);