diff --git a/src/main/org/apache/tools/ant/AntClassLoader.java b/src/main/org/apache/tools/ant/AntClassLoader.java index bb94dc098..d762621a3 100644 --- a/src/main/org/apache/tools/ant/AntClassLoader.java +++ b/src/main/org/apache/tools/ant/AntClassLoader.java @@ -159,7 +159,22 @@ public class AntClassLoader extends ClassLoader { public void setIsolated(boolean isolated) { ignoreBase = isolated; } - + + /** + * Force initialization of a class in a JDK 1.1 compatible, albeit hacky + * way + */ + static public void initializeClass(Class theClass) { + // ***HACK*** We try to create an instance to force the VM to run the + // class' static initializer. We don't care if the instance can't + // be created - we are just interested in the side effect. + try { + theClass.newInstance(); + } + catch (Exception e) { + //ignore - our work is done + } + } /** * Add a package root to the list of packages which must be loaded on the diff --git a/src/main/org/apache/tools/ant/Main.java b/src/main/org/apache/tools/ant/Main.java index 7c6d87d16..b481ea9c4 100644 --- a/src/main/org/apache/tools/ant/Main.java +++ b/src/main/org/apache/tools/ant/Main.java @@ -382,8 +382,8 @@ public class Main { try { addBuildListeners(project); - project.fireBuildStarted(); + project.fireBuildStarted(); project.init(); // set user-define properties diff --git a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java index 030f1c983..7fca86257 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java +++ b/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java @@ -122,6 +122,7 @@ public class ExecuteJava { AntClassLoader loader = new AntClassLoader(project, classpath, false); loader.setIsolated(true); target = loader.forceLoadClass(classname); + AntClassLoader.initializeClass(target); } final Method main = target.getMethod("main", param); main.invoke(null, argument); diff --git a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java index c728f2afa..ecc3b4042 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java +++ b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java @@ -109,6 +109,7 @@ public class Taskdef extends Task { Class taskClass = null; if (loader != null) { taskClass = loader.loadClass(value); + AntClassLoader.initializeClass(taskClass); } else { taskClass = Class.forName(value); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java index cef41c1bd..de367bf6b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java @@ -265,7 +265,7 @@ public class XMLValidateTask extends Task { AntClassLoader loader = new AntClassLoader(project, classpath, false); loader.addSystemPackageRoot("org.xml"); // needed to avoid conflict readerClass = loader.loadClass(readerClassName); - //readerImpl = loader.loadClass( + AntClassLoader.initializeClass(readerClass); } else readerClass = Class.forName(readerClassName); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java index 2202e5a82..aa6d2b2a9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java @@ -54,8 +54,7 @@ package org.apache.tools.ant.taskdefs.optional.junit; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; +import org.apache.tools.ant.*; import junit.framework.*; import java.lang.reflect.*; @@ -159,6 +158,7 @@ public class JUnitTestRunner implements TestListener { testClass = Class.forName(test.getName()); } else { testClass = loader.loadClass(test.getName()); + AntClassLoader.initializeClass(testClass); } Method suiteMethod = null; diff --git a/src/main/org/apache/tools/ant/types/Mapper.java b/src/main/org/apache/tools/ant/types/Mapper.java index 96a9d5083..af107dd74 100644 --- a/src/main/org/apache/tools/ant/types/Mapper.java +++ b/src/main/org/apache/tools/ant/types/Mapper.java @@ -203,6 +203,7 @@ public class Mapper extends DataType { } else { AntClassLoader al = new AntClassLoader(p, classpath); c = al.loadClass(classname); + AntClassLoader.initializeClass(c); } FileNameMapper m = (FileNameMapper) c.newInstance();