2009-08-21 12 views
15

Tengo un proyecto de eclipse donde cada carpeta de origen tiene su propia carpeta de salida asociada. En lugar de/classes se llama/eclipse-classes.¿Cómo configuro el classpath de eclipse utilizado para las pruebas junit?

Así que si tengo una carpeta: src// java (lo típico experto) principal la carpeta de destino es: objetivo/eclipse-clases

Y del mismo modo por los recursos etc.

Esto parece para trabajar (es decir, eclipse genera archivos .class que se colocan dentro de estas carpetas), pero la ejecución de cualquier prueba de Junit arroja una excepción que indica "clase no encontrada". Estoy ejecutando JUnit usando el corrector de prueba de eclipse incorporado (es decir, hago clic con el botón secundario en la clase, "ejecutar como", "prueba de Junit").

Copia de la carpeta/eclipse/clases de clases hace que tengan éxito, es decir, Eclipse está utilizando/clases, pero no puedo encontrar ninguna configuración para cambiarlo. ¿Hay alguna forma de averiguar dónde y por qué eclipse sigue usando la carpeta/classes?

(, También estoy usando el plugin m2eclipse quizá relevante)

Alguna información adicional inspirado por la respuesta de Rich vendedor: Maven está configurado para ejecutar el siguiente en los cambios de recursos:

process-resources resources:testResources 

Mientras que esto no hará nada útil (copias en el directorio incorrecto) los recursos no son problemáticos atm ya que terminan en la ubicación correcta.

Las entradas .classpath parecen bien. Hay un montón de sub-proyectos de Maven por lo que la anidación va un poco más profundo que lo que Rich ha publicado, pero por lo demás es exactamente igual a excepción de esta línea:

<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> 

Creo que es posible que no necesita que uno, pero no hace daño a nada atm .

Edit2: Más pruebas revelan que el eclipse es generar archivos de clase, tanto en las carpetas/eclipse-clases y la carpeta/classes. Parece que m2eclipse está ejecutando mvn build en segundo plano cuando se crea automáticamente, pero parece que no puedo encontrar la forma de desactivarlo. Trataré de ponerme en contacto con los desarrolladores de m2eclipse si nadie aquí tiene otras ideas.

+0

¿quiere decir que para las carpetas de origen "servidor" y "cliente" tendría "server-classes" y "client-classes" como carpetas de salida? –

+0

¿Cómo comienzas JUnit? ¿Utiliza el complemento JUnit Eclipse o inicia las pruebas de la unidad de Maven? – Dirk

+0

Agregué las respuestas en el texto de la pregunta. – wds

Respuesta

7

Si utiliza m2eclipse, entonces la configuración en el proyecto Eclipse se sobrescribe con el plugin. Ver this article para una solución.

La razón de esto es que algunos plugins de Maven no pueden hacer frente a un directorio que se encuentra fuera de target/, por lo que los desarrolladores m2eclipse forzar las carpetas para las clases compiladas para ser target/classes y target/test-classes, no importa lo que se configura en Eclipse.

Mediante el uso de un perfil, se pueden utilizar diferentes carpetas para Eclipse. Aún así, no es aconsejable cambiar las carpetas de salida para maven (y sus complementos).

+0

No lo creo, el compilador de eclipse está generando clases en las carpetas definidas por separado. Así que el compilador de eclipse está recogiendo en mis carpetas de salida, es el classpath en tiempo de ejecución que está roto. No quiero que Maven esté a cargo de generar esos archivos .class ya que es probable que rompa la compilación incremental. – wds

+0

Además, la solución mencionada parece estar orientada a configurar maven para colocar sus archivos .class en otro lugar cuando se usa eclipse, por lo que eclipse puede usar target/classes. Me estoy acercando desde el otro lado, supongo: configurando eclipse para salir del camino de maven. Esto parece ser un enfoque más lógico para mí (no contamina el proyecto .pom), pero solo si el complemento junit de alguna manera utiliza la ruta de compilación para crear su classpath en tiempo de ejecución. – wds

+0

Este trabajo solucionó el problema de mi classpath desde que pasé de maven-eclipse-plugin a m2eclipse. Gracias por publicar. – JamesC

4

integración JUnit El Eclipse tiene ninguna configuración especial ruta de clase, va a trabajar fuera de las carpetas de salida definidos en la ruta de clases y debe encontrar todas las clases compiladas a dichas carpetas. Puede ser que haya algo dudoso en su archivo .classpath, por lo que JUnit está confundido (de manera predeterminada, el archivo .classpath está oculto a la vista, se encuentra en la raíz del proyecto).

Según su descripción, esperaría ver entradas como las siguientes (tenga en cuenta la carpeta de salida predeterminada y la anulación de src/main/java y src/main/resources). ¿Su ruta de clases aspecto muy diferente, si es así que puede ser el problema

<classpathentry excluding="**" kind="src" output="target/eclipse-classes" path="src/main/resources"/> 
<classpathentry kind="src" output="target/eclipse-classes" path="src/main/java"/> 
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> 
<classpathentry kind="output" path="target/classes"/> 

Ésta es una posibilidad remota, pero también puede ser que un Maven limpia está configurado en su proyecto, si ese es el caso el contenido de target/eclipse-classes se eliminará siempre que se ejecute el objetivo limpio, por lo que las pruebas se eliminarán del sistema de archivos antes de ejecutar las pruebas. Puede ver qué objetivos ejecuta Maven abriendo las propiedades del proyecto (alt-enter) y seleccionando el elemento Maven.


Esta pieza no responde directamente a su pregunta, pero puede serle útil de todos modos. Tiendo a tener mis directorios de salida de Eclipse iguales que para Maven y no tengo problemas dentro de Eclipse (modifico el constructor de Maven para que solo ejecute recursos de proceso para que no intente compilar).

Si hago una compilación Maven, el compilador Maven construirá las clases modificadas (que serían todas si se incluye una limpieza). Una modificación posterior en Eclipse es detectada por el compilador incremental y procesada, todo está bien. Apago automáticamente la compilación, pero eso es solo porque me molesta, puede ser que Maven y Eclipse funcionen si los tienes apagados.

+0

Estoy bastante seguro de que maven solo ejecuta recursos de proceso. Voy a probar el resto el lunes y te llamaré. – wds

+0

agregó algo más de información, no veo nada allí que pueda explicarlo ... – wds

+0

I + 1 en su publicación como eventualmente me rendí y configuré maven y eclipse para usar las mismas carpetas de salida. Se rompe muy de vez en cuando, pero supongo que es Good Enough (TM). – wds

1

En caso de que esté abierto a probar un complemento diferente para esto: utilizo el complemento maven-eclipse para generar la configuración de mi proyecto Eclipse. Configuro el complemento para configurar mi proyecto de Eclipse para usar un directorio de salida completamente separado para las clases (ver a continuación). Es relativo a la raíz del proyecto, por lo que se encuentra fuera del objetivo.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <outputDirectory>eclipse_build</outputDirectory> 
     </configuration> 
    </plugin> 

Esto funciona muy bien para mí, incluyendo la posibilidad de realizar pruebas de sacarlo de la caja, tanto a través de Maven y Eclipse.

0

intente ejecutar mvn eclipse:eclipse. Esto me solucionó el problema

Cuestiones relacionadas