ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claudio Corsi <cco...@progress.com>
Subject Question about using the taskdef, ant task and the AntClassLoader.
Date Tue, 29 Apr 2003 15:54:33 GMT
Hi All,

I have found an interesting problem when one is defining their own task
and this
task is being defined within multiple build.xml files. The problem
happens when
you do the following.

	1 - define a task using the taskdef within a top level build file and 
	    supply a classpath

	   <taskdef name="foo" classpath="foo.jar" />

	2 - use the ant task to run another build.xml file.

	3 - define the same task within the new project using
	    the same/classpath information.

	  <taskdef name="foo" classpath="foo.jar" />


This process causes the following error:

	Trying to override old definition of task osjcfp

	BUILD FAILED
	file:/os/dserve/java/build.xml:514: The <osjcfp> task doesn't support
the nested "persistCapable" element.
		at
org.apache.tools.ant.IntrospectionHelper.createElement(IntrospectionHelper.java:521)
		at
org.apache.tools.ant.UnknownElement.handleChildren(UnknownElement.java:239)
		at
org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:122)
		at org.apache.tools.ant.Task.getReplacement(Task.java:401)
		at org.apache.tools.ant.Task.perform(Task.java:354)
		at org.apache.tools.ant.Target.execute(Target.java:309)
		at org.apache.tools.ant.Target.performTasks(Target.java:336)
		at org.apache.tools.ant.Project.executeTarget(Project.java:1339)
		at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:397)
		at org.apache.tools.ant.Task.perform(Task.java:341)
		at org.apache.tools.ant.Target.execute(Target.java:309)
		at org.apache.tools.ant.Target.performTasks(Target.java:336)
		at org.apache.tools.ant.Project.executeTarget(Project.java:1339)
		at org.apache.tools.ant.Project.executeTargets(Project.java:1255)
		at org.apache.tools.ant.Main.runBuild(Main.java:609)
		at org.apache.tools.ant.Main.start(Main.java:196)
		at org.apache.tools.ant.Main.main(Main.java:235)

	Total time: 41 seconds

NOTE: I do not get this exception if I try to create the same task
multiple
times within the same top level project. I only get the "Trying ..."
message
and I am also able to use the task. This only happens when I use the ant
task 
and that build process creates a taskdef. Also, the ant task call I used
was simply 

	<ant dir="foo" target="compile" />

I was able to remove this problem by not adding the defined task to the
new project
that ant creates. I changed the Ant initializeProject method from:

        Hashtable taskdefs = getProject().getTaskDefinitions();
        Enumeration et = taskdefs.keys();
        while (et.hasMoreElements()) {
            String taskName = (String) et.nextElement();
            if (taskName.equals("property")) {
                // we have already added this taskdef in #init
                continue;
            }
            Class taskClass = (Class) taskdefs.get(taskName);
            newProject.addTaskDefinition(taskName, taskClass);
        }
to:

        Hashtable taskdefs = getProject().getTaskDefinitions();
        Enumeration et = taskdefs.keys();
        while (et.hasMoreElements()) {
            String taskName = (String) et.nextElement();
            if (taskName.equals("property")) {
                // we have already added this taskdef in #init
                continue;
            }
            Class taskClass = (Class) taskdefs.get(taskName);
            Class newTaskClass = null;
            try {
              newTaskClass = Class.forName( taskClass.getName() );
            } catch( ClassNotFoundException cnfe ) {
              // This is no longer defined within this project.
              continue;
            }
            newProject.addTaskDefinition(taskName, (newTaskClass ==
null) ? taskClass : newTaskClass);
        }

I have tested this tested this solution and it works correctly. I also
wonder if
this will also be a problem with the DataTypeDefinitions that are
propagated to
the new projects?

Ant developers can you tell me if this is a bug or not?

If it is, is this solution that I offered useful?

thanks,

--Claudio

Mime
View raw message