Thanks Vincent,
I'll see if I can work around this by writing helpers too.
I want to dispense with the scripts because my application needs to run
on different platforms, and so I don't want to maintain shell scripts for
unix, batch scripts for Windows, etc., when ant already does a great job
at assembling paths. Also, I'm coding under the Turbine framework, which
no longer uses a wrapper script to invoke ant. Reintroducing the scripts
seems like a backwards step to me, and I'm keen to reduce the
maintenance, overhead during Turbine upgrades, platform-specific
development & testing, etc.
J.
>>>>>>>>>>>>>>>>>> Original Message <<<<<<<<<<<<<<<<<<
On 7/23/01, 1:08:09 AM, "Vincent Massol" <[EMAIL PROTECTED]> wrote regarding
Re: Defining classpath within ant build file:
> Hi Jason,
> Ant 2.0 will change that but for the time being it is not possible to use
an
> explicit classpath when defining a task that will call another task. For
> example, in Cactus, what I have done is to write helper classes. For
example
> the startserver task is simply a wrapper around a helper class that has
the
> logic. This so that the runservertask will actually not call the
startserver
> task but rather it's helper. This is because as you mentionned, in Ant
1.x
> it is not possible to call a task from another task when explicitely
> defining a classpath (when using the taskdef task).
> Note: The exception to this is when the second task to call is an Ant
task
> (i.e. located in an Ant package, can't remember which but I remember that
an
> Ant package was automatically added to the classloader class path,
probably
> org.apache.tools.ant.task).
> I don't know what's wrong with your script.
> Cheers,
> -Vincent
> ----- Original Message -----
> From: "Jason Grant" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Sunday, July 22, 2001 2:29 PM
> Subject: Defining classpath within ant build file
> I have a question that relates to testing via taskdefs & classloaders
> under ant.
> I have not been able to conduct tests after defining a classpath within
> ant's build.xml file. If I define the classpath externally (i.e. within
> the shell that executes ant), I am able to conduct my tests. If I
> instead define a classpath in either taskdefs, or in the targets
> themselves, I get ClassNotFound exceptions.
> Back when cactus was j2eeunit, Vincent explained that use of explicit
> classpath entries in either taskdefs or targets causes ant to run each of
> the tasks [having custom classpaths] under different classloaders, and so
> it is not possible for one task to call another (as done by the cactus
> server task) under these circumstances. This explains why things work
> when the classpath is configured externally by the shell - all of the
> tasks run under the same classloader.
> I would now like to dispense with the use of a wrapper script that sets
> up the classpath for me, and instead define the classpath within my
> build.xml file. I want to use a combination of path and refid
> statements, as shown below.
> Suggestions appreciated.
> Here's an example of what I'd like to do:
> <!-- Build classpath -->
> <path id="classpath">
> <fileset dir="../lib">
> <include name="**/*.jar"/>
> </fileset>
> <fileset dir="../../../../common/lib">
> <include name="**/servlet*.jar"/>
> </fileset>
> </path>
> ...
> <taskdef name="runservertests"
> classname="org.apache.commons.cactus.ant.RunServerTestsTask">
> <classpath refid="classpath"/>
> <taskdef/>
> <taskdef name="junit"
> classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
> <classpath refid="classpath"/>
> <taskdef/>
> <taskdef name="batchtest"
> classname="org.apache.tools.ant.taskdefs.optional.junit.BatchTest">
> <classpath refid="classpath"/>
> <taskdef/>
> ...
> <target name="run-tests">
> <junit printsummary="yes" haltonfailure="yes" haltonerror="yes"
> fork="yes">
> <formatter type="plain" usefile="false"/>
> <batchtest>
> <fileset dir="${src.dir}">
> <include name="**/*ServletTest.java"/>
> </fileset>
> </batchtest>
> </junit>
> </target>
> <target name="tests" depends="init-tasks">
> <runservertests testURL="http://localhost:8080"
> startTarget="start_tomcat_40"
> stopTarget="stop_tomcat_40"
> testTarget="run-tests"/>
> </target>