Estoy tratando de construir un proyecto Java simple con Maven. En mi archivo pom declaro JUnit 4.8.2 como la única dependencia. Aún así, Maven insiste en usar JUnit versión 3.8.1. ¿Cómo lo soluciono?
El problema se manifiesta en un error de compilación: "el paquete org.junit no existe". Esto se debe a la declaración de importación en mi código fuente. El nombre correcto del paquete en JUnit 4. * es org.junit. * Mientras que en la versión 3. * es junit.framework. *
Creo que he encontrado documentación sobre la raíz del problema en http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html pero el consejo parece estar destinado a los expertos de Maven. No entendí qué hacer.
Respuestas:
Solo para tener una respuesta con la solución completa para ayudar a los visitantes:
Todo lo que necesita hacer es agregar la dependencia junit a
pom.xml
. No olvides el<scope>test</scope>
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
fuente
@Dennis Roberts: Tenías toda la razón: mi clase de prueba estaba ubicada en src / main / java. También el valor del elemento "alcance" en el POM para JUnit era "prueba", aunque así es como se supone que debe ser. El problema fue que había sido descuidado al crear la clase de prueba en Eclipse, lo que resultó en que se creara en src / main / java en lugar de src / test / java. Esto se hizo más fácil de ver en la vista Explorador de proyectos de Eclipse después de ejecutar "mvn eclipse: eclipse", pero su comentario fue lo que me hizo verlo primero. Gracias.
fuente
mi problema era una línea dentro de mi
pom.xml
tenía la línea que<sourceDirectory>${basedir}/src</sourceDirectory>
quitaba esta línea hizo que maven usara carpetas de estructura regular que resuelven mi problemafuente
eliminar la etiqueta de alcance en pom.xml para junit funcionó.
fuente
Agregue esta dependencia a su
pom.xml
archivo:http://mvnrepository.com/artifact/junit/junit-dep/4.8.2
<!-- https://mvnrepository.com/artifact/junit/junit-dep --> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.8.2</version> </dependency>
fuente
Yo tuve el mismo problema. Todo lo que hice fue: del archivo pom.xml eliminé la dependencia para junit 3.8 y agregué una nueva dependencia para junit 4.8. Luego hice maven clean y maven install. Hizo el truco. Para verificar, después de la instalación de maven, fui proyecto-> propiedades-ruta de construcción-> dependencias de maven y vi que ahora el jar junit 3.8 se ha ido, en su lugar aparece junit 4.8 jar. ¡¡frio!!. Ahora mi prueba funciona como un encanto .. Espero que esto ayude de alguna manera ..
fuente
Mi caso fue un simple descuido.
Puse la declaración de dependencia JUnit dentro
<dependencies>
del<dependencyManagement/>
nodo en lugar de<project/>
en el archivo POM. La forma correcta es:<project> <!-- Other elements --> <dependencies> <!-- Other dependencies--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> <project>
fuente
¿Cómo declaraste la versión?
<version>4.8.2</version>
Tenga en cuenta el significado de esta declaración que se explica aquí (ver NOTAS) :
Al declarar una versión "normal" como 3.8.2 para Junit, internamente esto se representa como "permitir cualquier cosa, pero preferir 3.8.2". Esto significa que cuando se detecta un conflicto, Maven puede usar los algoritmos de conflicto para elegir la mejor versión. Si especifica [3.8.2], significa que solo se utilizará 3.8.2 y nada más.
Para forzar el uso de la versión 4.8.2 intente
<version>[4.8.2]</version>
Como no tiene otras dependencias en su proyecto, no debería haber ningún conflicto que cause su problema. La primera declaración debería funcionar para usted si puede obtener esta versión de un repositorio. ¿Hereda dependencias de un pom padre?
fuente
<version>[4.8.2,)</version>
sería mejor forzar al menos esa versión?Tenía mis archivos en los lugares correctos, y simplemente eliminar
<scope>test</scope>
de la entrada de dependencia JUnit resolvió el problema (estoy usando JUnit 4.12). Creo que con eltest
alcance, la dependencia simplemente se ignoraba durante la fase de compilación. Ahora todo está funcionando incluso cuando llamomvn test
.fuente
Tuve un problema bastante similar en un proyecto "test-utils" (agregando características, reglas y aserciones a JUnit) hijo de un proyecto principal que inyecta dependencias. La clase que depende del paquete org.junit.rules estaba en src / main / java.
Entonces agregué una dependencia en junit sin alcance de prueba y resolvió el problema:
pom.xml del proyecto test-util:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
pom.xml del proyecto principal:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency>
fuente
Tuve un problema similar de Eclipse compilando mi código bien, pero Maven falló al compilar las pruebas cada vez a pesar de que JUnit estaba en mi lista de dependencias y las pruebas estaban en / src / test / java /.
En mi caso, tenía la versión incorrecta de JUnit en mi lista de dependencias. Escribí pruebas JUnit4 (con anotaciones) pero tenía JUnit 3.8.x como mi dependencia. Entre la versión 3.8.xy 4 de JUnit, cambiaron el nombre del paquete de junit.framework a org.junit, razón por la cual Maven todavía rompe la compilación usando un jar JUnit.
Todavía no estoy del todo seguro de por qué Eclipse se compiló correctamente. Debe tener su propia copia de JUnit4 en algún lugar de la ruta de clases. Espero que esta solución alternativa sea útil para las personas. Llegué a esta solución después de seguir el enlace de Arthur anterior.
fuente
También me encontré con este problema: estaba tratando de extraer un objeto de una fuente y estaba funcionando en el código de prueba pero no en el código src. Para realizar más pruebas, copié un bloque de código de la prueba y lo solté en el código src, luego eliminé inmediatamente las líneas JUnit para saber cómo la prueba estaba tirando del objeto. Entonces, de repente, mi código no se compilaba.
El problema fue que cuando introduje el código, Eclipse resolvió amablemente todas las clases, por lo que tuve llamadas JUnit provenientes de mi código src, lo cual no era correcto. Debería haber notado las advertencias en la parte superior sobre las importaciones no utilizadas, pero no las vi.
Una vez que eliminé las importaciones JUnit no utilizadas en mi archivo src, todo funcionó a la perfección.
fuente
Yo también tuve el mismo problema que se muestra a continuación.
Para resolver el problema, las siguientes líneas se agregan a la
dependencies
sección en el nivel de aplicación build.gradle.Luego, la compilación de Gradle informó la siguiente advertencia.
Para resolver esta advertencia, se agrega la siguiente sección al nivel de aplicación build.gradle.
fuente
Encuentre la única solución para este error si tiene código en src / main / java Utils
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.9.1</version> </dependency>
fuente
Cambiar la versión junit solucionó esto para mí. Parece que la versión 3.8.1 no funcionó en mi caso. Problema solucionado al cambiarlo a 4.12
fuente
De forma predeterminada, maven busca en estas carpetas las clases de java y de prueba respectivamente: src / main / java y src / test / java
Cuando se especifica src con las clases de prueba en fuente y el alcance de la dependencia de junit en pom.xml se menciona como prueba, maven no encontrará org.unit.
fuente