junit and ant with classloaders is always fun.
I cannot help with the first problem, but the second should be fixed in ant 1.6.3
com.ibm.md.tse.dmiw.security.logic.SecurityControlTableLogicImplTestCase
BUILD FAILED
C:\build.xml:71: org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter is not a JUnitResultFormatter
see: http://issues.apache.org/bugzilla/show_bug.cgi?id=28474
WHATSNEW: * Incorrect classloader parent in junittask when using with
ant-junit.jar and junit.jar not in the project classloader. Bugzilla
report 28474.
Peter
David E Noel wrote:
I'm still stuck on this. Any ideas?
Dave Noel [EMAIL PROTECTED]
David E Noel/Burlington/Contr/[EMAIL PROTECTED] 03/24/2005 06:53 PM
Please respond to
"Ant Users List"
To user@ant.apache.org cc
Subject ClassLoader issues with Ant 1.6.x and the <junit> task
Hello fellow ant users. I have a problem with ant and junit that I am pretty sure is a class loader problem. When I run the junit task on my test cases I always get a ClassNotFoundException on my test case classes. I am sure they are on the classpath so that makes me think it is a class loader problem.
Here is what the error looks like when I run my ant build
Buildfile: build.xml Trying to override old definition of datatype junit
init:
compile:
unit: [junit] Running com.mycom.MyClassTestCase [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec [junit] Testsuite: com.mycom.MyClassTestCase [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] Null Test: Caused an ERROR
[junit] com.mycom.MyClassTestCase
[junit] java.lang.ClassNotFoundException: com.mycom.MyClassTestCase
[junit] at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
[junit] at java.security.AccessController.doPrivileged(Native Method)
[junit] at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
[junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
[junit] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
[junit] at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
[junit] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
[junit] at java.lang.Class.forName0(Native Method)
[junit] at java.lang.Class.forName(Class.java:141)
I get this error when I run the unit task from my build.xml file. Here is
my build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="MyProject" default="dist" basedir="."> <property name="source_dir" value="."/> <property name="build_dir" value="${basedir}/build"/> <property name="distribute_dir" value="dist"/>
<!-- these will be set by the calling builder. They are defined here so we can run in standalone mode -->
<property name="javac.debug" value="true" />
<property name="javac.debuglevel" value="source" />
<property name="javac.exe" value="${java.home}/../bin/javac" />
<property name="javac.deprecation" value="off"/>
<property name="javac.verbose" value="no"/>
<property name="javac.optimize" value="off"/>
<property name="javac.nowarn" value="off"/>
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath>
<fileset file="${basedir}/../ThirdPartyJavaLibs/ant-junit.jar"/> <!-- I want this to be <classpath refid="project.classpath" /> but I am leaving like this to demonstrate where I moved the junit jars to-->
<fileset file="${basedir}/../ThirdPartyJavaLibs/junit.jar"/>
</classpath>
</taskdef>
<path id="project.classpath">
<fileset dir="${basedir}/../ThirdPartyJavaLibs">
<include name="**/*.jar"/>
</fileset> <fileset dir="${build_dir}">
<include name="**/*.class"/>
</fileset>
</path>
<target name="init"> <tstamp/> <mkdir dir="${build_dir}" /> <mkdir dir="${distribute_dir}/lib"/> </target>
<target name="compile" depends="init">
<javac deprecation="${javac.deprecation}" verbose="${javac.verbose}" optimize="${java.optimize}"
nowarn="${javac.nowarn}" srcdir="${source_dir}" destdir="${build_dir}" executable="${javac.exe}" fork="true" debug="${javac.debug}" debuglevel="${javac.debuglevel}">
<classpath refid="project.classpath"/>
</javac>
</target>
<target name="dist" depends="compile">
<jar jarfile="${distribute_dir}/lib/${ant.project.name}.jar">
<fileset dir="${build_dir}">
<include name="**/*.class"/>
<exclude name="**/*TestCase.class"/>
</fileset>
</jar>
</target>
<target name="clean" depends="init"> <delete dir="${distribute_dir}"/> <delete dir="${build_dir}"/> </target>
<target name="unit" depends="compile">
<junit printsummary="yes" fork="yes">
<classpath refid="project.classpath"/>
<formatter type="brief" usefile="false"/>
<batchtest todir="${distribute_dir}">
<fileset dir="${build_dir}">
<include name="**/*TestCase.class"/>
</fileset>
</batchtest>
</junit>
</target>
</project>
After reading the ant FAQ about classloaders it sounds like I needed to pull the ant-junit.jar and junit.jar classes out of the $ANT_HOME/lib dir.
That is why I added the taskdef for the junit task in the buildfile. That
did not work for me though.
So I get the above error regardless if ant-junit.jar and junit.jar are in the $ANT_HOME/lib dir or not.
Also I did not start getting the warning about the junit task until I set up a junit taskdef when I moved the jars out of $ANT_HOME/lib. I'm not sure if this warning is a problem or not.
Another interesting error I noticed(I'm not sure if it is related to the same problem) is that if I change fork="yes" to fork="no" in the junit task attributes I get the following error
Buildfile: build.xml Trying to override old definition of datatype junit
init:
compile:
unit:
[junit] Running com.ibm.md.tse.dmiw.security.logic.SecurityControlTableLogicImplTestCase
BUILD FAILED
C:\build.xml:71: org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter is not a JUnitResultFormatter
So I am hoping someone out there can help me. I'm not sure what I can do.
Performing a Google search has produced many forum posts where this problem is discussed but I have yet to find one where someone produces a solution.
I forgot to mention I am running a 1.4.2 java vm
Dave Noel [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]