Inicio » Test » Eclipse + JUnit + java.lang.NoSuchFieldError: NULL

Eclipse + JUnit + java.lang.NoSuchFieldError: NULL

Estos días me he vuelto a tropezar con un error que me costó bastante tiempo resolver, no por la complejidad, sino por encontrar el motivo:

Antecedentes:

Tengo un proyecto A en eclipse que depende de otro B. El proyecto A tiene dependencias con JUnit 4.10 y la ejecución con “mvn test” funciona correctamente, aun así, Eclipse me devuelve este elocuente error:

java.lang.NoSuchFieldError: NULL
at org.junit.runners.ParentRunner.(ParentRunner.java:54)
at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:55)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:104)

Reviso las dependencias con “mvn dependency:tree” para ver las librerías que se están incluyendo y efectivamente está presente la librería  junit-4.10.jar

¿Cómo es posible que mvn funcione y Eclipse no?  Pues algo extraño tiene que pasar con Eclipse. Reviso las dependencias que importa el proyecto, bloque Referenced Library usando la vista Package Explorer y la entrada sobre JUnit que tengo es junit-4.10.jar ¡Todo correcto! Entonces… ¿Qué está pasando?

Reviso el lanzamiento del Junit: Run As -> Run Preferences y compruebo que el Test Runner es JUnit4 ¿Entones? Entonces es cuando me doy cuenta que en el Classpath se está importando librerías del proyecto B, entre ellas la junit-3.8.jar

¿Por qué no prevalece la librería importada por el proyecto principal A? No lo sé.

Para solucionar el error anterior hay que eliminar esta incoherencia de librerías. Esto ya depende de como estén montado el proyecto A y el B. En mi caso, para solucionarlo e eliminado la referencia directa al proyecto B y hago la referencia al B.jar que se genera a partir de él y que no contiene la librería problemática.

Si tienes el proyecto B referenciado desde el pom como un jar, en vez de hacer “mvn eclipse:eclipse”  puedes hacer

mvn eclipse:clean eclipse:eclipse -Declipse.useProjectReferences=false

para que no se haga referencia a los proyectos del classpath.

Espero que esto os sirva de ayuda.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s