2010-05-10 18 views
5

Estoy desarrollando una aplicación Eclipse SWT usando Eclipse. También hay algunas pruebas JUnit 4, que prueban algunos DAO. Pero cuando intento ejecutar las pruebas a través de una construcción ant, todas las pruebas fallan porque no se encuentran las clases de prueba.Sin embargo, otro problema de classpath Ant + JUnit

Google planteó alrededor de un millón de personas que tienen todos el mismo problema, pero ninguna de sus soluciones parece funcionar para mí -.-.

Estos son los contenidos de mi archivo build.xml:

<property name="test.reports" value="./test/reports" /> 
<property name="classes" value="build" /> 


<path id="project.classpath"> 
    <pathelement location="${classes}" /> 
</path> 

<target name="testreport"> 
    <mkdir dir="${test.reports}" /> 
    <junit fork="yes" printsummary="no" haltonfailure="no"> 
     <batchtest fork="yes" todir="${test.reports}" > 
      <fileset dir="${classes}"> 
       <include name="**/Test*.class" /> 
      </fileset> 
     </batchtest> 
     <formatter type="xml" /> 

     <classpath refid="project.classpath" /> 


    </junit> 

    <junitreport todir="${test.reports}"> 
     <fileset dir="${test.reports}"> 
      <include name="TEST-*.xml" /> 
     </fileset> 
     <report todir="${test.reports}" /> 
    </junitreport> 
</target> 

Las clases de prueba están en el directorio de construcción junto con las clases de la aplicación, aunque se encuentren en algunas subcarpetas de acuerdo con sus paquetes.

Quizás esto también es importante: Al principio Ant se quejó de que JUnit no estaba en su classpath, pero desde que lo puse allí (con el editor de configuración de eclipse) se queja de que JUnit está en su classpath dos veces.

WARNING: multiple versions of ant detected in path for junit 
    [junit]   jar:file:C:/Users/as df/Documents/eclipse/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar!/org/apache/tools/ant/Project.class 
    [junit]  and jar:file:/C:/Users/as%20df/Documents/eclipse/plugins/org.apache.ant_1.7.1.v20090120-1145/lib/ant.jar!/org/apache/tools/ant/Project.class 

conjuntos de archivos y listas de archivos He intentado especificando todos y cada subdirectorio, todos y cada archivo de clase, que he probado, nada parece funcionar.

Gracias por su ayuda, he estado sentado durante horas en esta cosa ahora ...

+0

¿Te importaría escribir el nombre de usuario "as_df" en lugar de "como df" (reemplazando el en blanco por el guión bajo)? – stacker

Respuesta

3

Tuve el mismo problema 'múltiples versiones de ant detectadas en la ruta para junit'. El problema desapareció cuando cambié el nombre por el directorio Eclipse_Home y eliminé los caracteres especiales de él. La ruta tenía '[1]' en ella que estaba causando el problema.

1

Este Ant build.xml funciona bien para mí. Echa un vistazo a las propiedades para ver si la estructura del directorio coincide con la tuya; ajustar según sea necesario.

<?xml version="1.0" encoding="UTF-8"?> 
<project name="xslt-converter" basedir="." default="package"> 

    <property name="version" value="1.6"/> 
    <property name="haltonfailure" value="no"/> 

    <property name="out" value="out"/> 

    <property name="production.src" value="src"/> 
    <property name="production.lib" value="lib"/> 
    <property name="production.resources" value="config"/> 
    <property name="production.classes" value="${out}/production/${ant.project.name}"/> 

    <property name="test.src" value="test"/> 
    <property name="test.lib" value="lib"/> 
    <property name="test.resources" value="config"/> 
    <property name="test.classes" value="${out}/test/${ant.project.name}"/> 

    <property name="exploded" value="out/exploded/${ant.project.name}"/> 
    <property name="exploded.classes" value="${exploded}/WEB-INF/classes"/> 
    <property name="exploded.lib" value="${exploded}/WEB-INF/lib"/> 

    <property name="reports.out" value="${out}/reports"/> 
    <property name="junit.out" value="${reports.out}/junit"/> 
    <property name="testng.out" value="${reports.out}/testng"/> 

    <path id="production.class.path"> 
     <pathelement location="${production.classes}"/> 
     <pathelement location="${production.resources}"/> 
     <fileset dir="${production.lib}"> 
      <include name="**/*.jar"/> 
      <exclude name="**/junit*.jar"/> 
      <exclude name="**/*test*.jar"/> 
     </fileset> 
    </path> 

    <path id="test.class.path">        
     <path refid="production.class.path"/> 
     <pathelement location="${test.classes}"/> 
     <pathelement location="${test.resources}"/> 
     <fileset dir="${test.lib}"> 
      <include name="**/junit*.jar"/> 
      <include name="**/*test*.jar"/> 
     </fileset> 
    </path> 

    <path id="testng.class.path"> 
     <fileset dir="${test.lib}"> 
      <include name="**/testng*.jar"/> 
     </fileset> 
    </path> 

    <available file="${out}" property="outputExists"/> 

    <target name="clean" description="remove all generated artifacts" if="outputExists"> 
     <delete dir="${out}" includeEmptyDirs="true"/> 
     <delete dir="${reports.out}" includeEmptyDirs="true"/> 
    </target> 

    <target name="create" description="create the output directories" unless="outputExists"> 
     <mkdir dir="${production.classes}"/> 
     <mkdir dir="${test.classes}"/> 
     <mkdir dir="${reports.out}"/> 
     <mkdir dir="${junit.out}"/> 
     <mkdir dir="${testng.out}"/> 
     <mkdir dir="${exploded.classes}"/> 
     <mkdir dir="${exploded.lib}"/> 
    </target> 

    <target name="compile" description="compile all .java source files" depends="create"> 
     <!-- Debug output 
       <property name="production.class.path" refid="production.class.path"/> 
       <echo message="${production.class.path}"/> 
     --> 
     <javac srcdir="src" destdir="${out}/production/${ant.project.name}" debug="on" source="${version}"> 
      <classpath refid="production.class.path"/> 
      <include name="**/*.java"/> 
      <exclude name="**/*Test.java"/> 
     </javac> 
     <javac srcdir="${test.src}" destdir="${out}/test/${ant.project.name}" debug="on" source="${version}"> 
      <classpath refid="test.class.path"/> 
      <include name="**/*Test.java"/> 
     </javac> 
    </target> 

    <target name="junit-test" description="run all junit tests" depends="compile"> 
     <!-- Debug output 
       <property name="test.class.path" refid="test.class.path"/> 
       <echo message="${test.class.path}"/> 
     --> 
     <junit printsummary="yes" haltonfailure="${haltonfailure}"> 
      <classpath refid="test.class.path"/> 
      <formatter type="xml"/> 
      <batchtest fork="yes" todir="${junit.out}"> 
       <fileset dir="${test.src}"> 
        <include name="**/*Test.java"/> 
       </fileset> 
      </batchtest> 
     </junit> 
     <junitreport todir="${junit.out}"> 
      <fileset dir="${junit.out}"> 
       <include name="TEST-*.xml"/> 
      </fileset> 
      <report todir="${junit.out}" format="frames"/> 
     </junitreport> 
    </target> 

    <taskdef resource="testngtasks" classpathref="testng.class.path"/> 
    <target name="testng-test" description="run all testng tests" depends="compile"> 
     <!-- Debug output 
       <property name="test.class.path" refid="test.class.path"/> 
       <echo message="${test.class.path}"/> 
     --> 
     <testng classpathref="test.class.path" outputDir="${testng.out}" haltOnFailure="${haltonfailure}" verbose="2" parallel="methods" threadcount="50"> 
      <classfileset dir="${out}/test/${ant.project.name}" includes="**/*.class"/> 
     </testng> 
    </target> 

    <target name="exploded" description="create exploded deployment" depends="testng-test"> 
     <copy todir="${exploded.classes}"> 
      <fileset dir="${production.classes}"/> 
     </copy> 
     <copy todir="${exploded.lib}"> 
      <fileset dir="${production.lib}"/> 
     </copy> 
    </target> 

    <target name="package" description="create package file" depends="exploded"> 
     <jar destfile="${out}/${ant.project.name}.jar" basedir="${production.classes}" includes="**/*.class"/> 
    </target> 

</project> 
+0

Hm parece que eso solucionó el problema, pero ahora obtengo "Java VM forked salió de forma anormal. Tenga en cuenta que el tiempo en el informe no refleja el tiempo hasta que la VM salga" – DeX3

6

Estaba obteniendo esto solo cuando uso la opción 'fork = true' para la tarea junit. Estaba sucediendo porque mi ANT_HOME tenía '..' en él (por ejemplo, '/3rdparth/jboss/jboss-5/../tools'). Una vez que reduje ese camino, la advertencia de "múltiples versiones de hormigas" desapareció.

Cuestiones relacionadas