Ant 1.7.1
Cactus 1.8
Tomcat 5.5
I'm trying to automate a test with ant and cactus but having some
classloader issues.

Here is part of my buildfile:
<!-- Libraries required for the Cactus tests -->
<property name="aspectjrt.jar"
location="${cactus.jars}/aspectjrt-1.5.3.jar"/>
<property name="cactus.core.jar"
location="${cactus.jars}/cactus.core.framework.uberjar.javaEE.14-1.8.0.jar"/>
<property name="cactus.ant.jar"
location="${cactus.jars}/cactus.integration.ant-1.8.0.jar"/>
<property name="cactus.shared.jar"
location="${cactus.jars}/cactus.integration.shared.api-1.8.0.jar"/>
<property name="commons.httpclient.jar"
location="${cactus.jars}/commons-httpclient-3.1.jar"/>
<property name="commons.logging.jar"
location="${cactus.jars}/commons-logging-1.1.jar"/>
<property name="httpunit.jar" location="${cactus.jars}/httpunit-1.6.jar"/>
<property name="junit.jar" location="${cactus.jars}/junit-3.8.2.jar"/>
<property name="cargo.ant.jar" location="${cactus.jars}/cargo-ant-0.9.jar"/>
<property name="cargo.core.jar"
location="${cactus.jars}/cargo-core-uberjar-0.9.jar"/>
<property name="nekohtml.jar" location="${cactus.jars}/nekohtml-1.9.6.jar"/>
<path id="cactus.myclasspath">
<pathelement location="${aspectjrt.jar}"/>
<pathelement location="${cactus.core.jar}"/>
<pathelement location="${cactus.ant.jar}"/>
<pathelement location="${cactus.shared.jar}"/>
<pathelement location="${commons.httpclient.jar}"/>
<pathelement location="${commons.logging.jar}"/>
<pathelement location="${junit.jar}"/>
<pathelement location="${httpunit.jar}"/>
<pathelement location="${nekohtml.jar}"/>
<pathelement location="${cargo.ant.jar}"/>
<pathelement location="${cargo.core.jar}"/>
</path>
<cactifywar destfile="myapp.war" srcfile="C:/originalWebApp/mainapp.war">
</cactifywar>
<cactus haltonfailure="no" showoutput="yes" printsummary="on"
warfile="myapp.war">
 <classpath>
  <pathelement location="${unittest.testsrc}"/>
  <pathelement location="${cactus.myclasspath}"/>
 </classpath>
 <containerset>
  <cargo containerId="tomcat5x" home="${tomcat5x.home}"
output="./tomcat.cactus.log">
   <configuration home="./tomcat_cactus">
     <property name="cargo.servlet.port" value="8080"/>
     <property name="cargo.logging" value="high"/>
     <deployable type="war" file="myapp.war"/>
   </configuration>
  </cargo>
 </containerset>
 <formatter type="xml"/>
 <batchtest fork="yes" todir="./reports">
   <fileset dir="${unittest.testsrc}">
  <include name="**/ServicesTestSuite.java"/>
   </fileset>
 </batchtest>
</cactus>


After running this, my report contains
<error message="org/apache/cactus/ServletTestSuite"
type="java.lang.NoClassDefFoundError">java.lang.NoClassDefFoundError:
org/apache/cactus/ServletTestSuite
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:164)
</error>


I tried adding cactus.myclasspath to <classpath> and it still does not work.
I tried reading the archives which talked about client classpath and server
classpath and I could not resolve the issue. Please help.

Reply via email to