You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ant.apache.org by "Karr, David" <da...@wamu.net> on 2008/03/27 17:37:06 UTC

(resent) Defined task fails to find base class of task

(Sorry, I somehow sent this before it was done.)

I have a simple build file that compiles some files and has a taskdef
for one of the compiled classes, which indirectly references a class in
one of the jars in the classpath.  I have the taskdef inside the target
which uses the task.  When it executes the defined task, it fails to
find the class from that jar (NoClassDefFound).  I ran SysInternals
FileMon while the build is running to verify it's reading the jar file
with that base class.

The actual exception I get is:

	java.lang.NoClassDefFoundError:
org/apache/oro/text/perl/Perl5Util

This is referenced from the P4Base class, the base class of my taskdef
class.

What could I be doing wrong here?

Here is my simple build file:
-----------------------
<?xml version="1.0" encoding="UTF-8"?>
<project name="WLA" default="default" basedir=".">
    <description>Builds, tests, and runs the project WLA.</description>
 
   <property file="nbuild.properties"/>
 
   <target name="default"
depends="compile,install-label-info,build-war">
   </target>
 
    <target name="compile">
        <delete dir="${build.classes.dir}"/>
        <mkdir dir="${build.classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${build.classes.dir}"
fork="true"
               debug="true" verbose="false">
            <include name="**/*.java"/>
            <classpath path="${javac.classpath}"/>
        </javac>
    </target>
    
    <target name="build-war">
    </target>
    
   <target name="install-label-info">
      <taskdef name="p4NewestLabel"
classname="com.wamu.ant.perforce.P4NewestLabel">
          <classpath path="${build.classes.dir}:${javac.classpath}"/>
      </taskdef>
      <echo message="classpath[${javac.classpath}]"/>
      <p4NewestLabel labelName="label" labelDesc="labelDesc"/>
   </target>
 
</project>
-----------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


AW: (resent) Defined task fails to find base class of task

Posted by Rainer Noack <ra...@noacks.net>.
Hi David,

Dealing with ant-builds that compile a task and then use it is a beast.
There a some pitfalls in ant (and java).
Some years ago I wrote two tasks to introspect and manipulate the
classloader hierarchy in ant. You can find them at

http://enitsys.sourceforge.net/ant-classloadertask/

(AFAIK they are not longer proposed for an ant release.)

Use the <classloaderreport> task immediately before using your task to find
out more about your classpathproblems.

The most simple usage for your problem is to add all your required classes
and jars to the "Project-Classloader".

Hope that helps.

Rainer Noack

-----Ursprüngliche Nachricht-----
Von: Karr, David [mailto:david.karr@wamu.net] 
Gesendet: Freitag, 28. März 2008 19:04
An: Ant Users List
Betreff: RE: (resent) Defined task fails to find base class of task

So far, what I'm finding is that if my task class is in my "build"
directory, but it references a class in another jar, and neither of
those locations is in the global classpath, specifying a "classpath"
attribute or nested element to specify those locations just won't work.

I've tried numerous variations of the "classpath" attribute and element,
specifying both the "build" directory and the referenced jar.  If I
leave the "build" directory out if it, it fails to find the task class.
However, no variation results in it finding the indirectly referenced
class.

I even tried assembling another jar file that contains both the
referenced jar file and my task class, and setting that as the
"classpath" attribute.  This also fails to find the referenced class.

The only temporary workaround that's working is to edit my Eclipse Ant
classpath entries, adding the indirectly referenced jar file.  When I do
that, running the task finds both the task class and the referenced
class and executes the task.

Is this some symptom of running Ant from Eclipse?

Why can't I get a working taskdef that specifies the indirectly
referenced jar to work?


> -----Original Message-----
> From: Karr, David 
> Sent: Thursday, March 27, 2008 9:37 AM
> To: Ant Users List
> Subject: (resent) Defined task fails to find base class of task
> 
> (Sorry, I somehow sent this before it was done.)
> 
> I have a simple build file that compiles some files and has a 
> taskdef for one of the compiled classes, which indirectly 
> references a class in one of the jars in the classpath.  I 
> have the taskdef inside the target which uses the task.  When 
> it executes the defined task, it fails to find the class from 
> that jar (NoClassDefFound).  I ran SysInternals FileMon while 
> the build is running to verify it's reading the jar file with 
> that base class.
> 
> The actual exception I get is:
> 
> 	java.lang.NoClassDefFoundError:
> org/apache/oro/text/perl/Perl5Util
> 
> This is referenced from the P4Base class, the base class of 
> my taskdef class.
> 
> What could I be doing wrong here?
> 
> Here is my simple build file:
> -----------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <project name="WLA" default="default" basedir=".">
>     <description>Builds, tests, and runs the project 
> WLA.</description>
>  
>    <property file="nbuild.properties"/>
>  
>    <target name="default"
> depends="compile,install-label-info,build-war">
>    </target>
>  
>     <target name="compile">
>         <delete dir="${build.classes.dir}"/>
>         <mkdir dir="${build.classes.dir}"/>
>         <javac srcdir="${src.dir}" destdir="${build.classes.dir}"
> fork="true"
>                debug="true" verbose="false">
>             <include name="**/*.java"/>
>             <classpath path="${javac.classpath}"/>
>         </javac>
>     </target>
>     
>     <target name="build-war">
>     </target>
>     
>    <target name="install-label-info">
>       <taskdef name="p4NewestLabel"
> classname="com.wamu.ant.perforce.P4NewestLabel">
>           <classpath path="${build.classes.dir}:${javac.classpath}"/>
>       </taskdef>
>       <echo message="classpath[${javac.classpath}]"/>
>       <p4NewestLabel labelName="label" labelDesc="labelDesc"/>
>    </target>
>  
> </project>
> -----------------------
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org For 
> additional commands, e-mail: user-help@ant.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


RE: (resent) Defined task fails to find base class of task

Posted by "Karr, David" <da...@wamu.net>.
So far, what I'm finding is that if my task class is in my "build"
directory, but it references a class in another jar, and neither of
those locations is in the global classpath, specifying a "classpath"
attribute or nested element to specify those locations just won't work.

I've tried numerous variations of the "classpath" attribute and element,
specifying both the "build" directory and the referenced jar.  If I
leave the "build" directory out if it, it fails to find the task class.
However, no variation results in it finding the indirectly referenced
class.

I even tried assembling another jar file that contains both the
referenced jar file and my task class, and setting that as the
"classpath" attribute.  This also fails to find the referenced class.

The only temporary workaround that's working is to edit my Eclipse Ant
classpath entries, adding the indirectly referenced jar file.  When I do
that, running the task finds both the task class and the referenced
class and executes the task.

Is this some symptom of running Ant from Eclipse?

Why can't I get a working taskdef that specifies the indirectly
referenced jar to work?


> -----Original Message-----
> From: Karr, David 
> Sent: Thursday, March 27, 2008 9:37 AM
> To: Ant Users List
> Subject: (resent) Defined task fails to find base class of task
> 
> (Sorry, I somehow sent this before it was done.)
> 
> I have a simple build file that compiles some files and has a 
> taskdef for one of the compiled classes, which indirectly 
> references a class in one of the jars in the classpath.  I 
> have the taskdef inside the target which uses the task.  When 
> it executes the defined task, it fails to find the class from 
> that jar (NoClassDefFound).  I ran SysInternals FileMon while 
> the build is running to verify it's reading the jar file with 
> that base class.
> 
> The actual exception I get is:
> 
> 	java.lang.NoClassDefFoundError:
> org/apache/oro/text/perl/Perl5Util
> 
> This is referenced from the P4Base class, the base class of 
> my taskdef class.
> 
> What could I be doing wrong here?
> 
> Here is my simple build file:
> -----------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <project name="WLA" default="default" basedir=".">
>     <description>Builds, tests, and runs the project 
> WLA.</description>
>  
>    <property file="nbuild.properties"/>
>  
>    <target name="default"
> depends="compile,install-label-info,build-war">
>    </target>
>  
>     <target name="compile">
>         <delete dir="${build.classes.dir}"/>
>         <mkdir dir="${build.classes.dir}"/>
>         <javac srcdir="${src.dir}" destdir="${build.classes.dir}"
> fork="true"
>                debug="true" verbose="false">
>             <include name="**/*.java"/>
>             <classpath path="${javac.classpath}"/>
>         </javac>
>     </target>
>     
>     <target name="build-war">
>     </target>
>     
>    <target name="install-label-info">
>       <taskdef name="p4NewestLabel"
> classname="com.wamu.ant.perforce.P4NewestLabel">
>           <classpath path="${build.classes.dir}:${javac.classpath}"/>
>       </taskdef>
>       <echo message="classpath[${javac.classpath}]"/>
>       <p4NewestLabel labelName="label" labelDesc="labelDesc"/>
>    </target>
>  
> </project>
> -----------------------
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org For 
> additional commands, e-mail: user-help@ant.apache.org
> 
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org