2011-07-04 22 views
10

Tengo proyecto que depende de commons-httpclient [2.0] (compilar).Maven 2 - diferentes versiones de dependencia en prueba y compilación

Me gustaría escribir algunas pruebas jbehave - jbehave-core 3.4.5 (prueba). Ambas dependencias dependen de commons-lang pero en diferentes versiones - 1.0.1 y 2.5.

dependency

Cuando ejecuto el paquete mvn me sale [FALLO BUID] en la sección de pruebas. Hay una excepción para mi caso de prueba en la producción segura-plugin:

java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.substringBeforeLast(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; 

Al mirar en el código fuente - (...) Método de hecho, no hay StringUtils.substringBeforeLast - en commons-lang 1.0.1 . ¿Por qué maven usa commons-lang de commons-httpclient (compilar) y no de jbehave-core en las pruebas?

No puedo permitirme excluir esta dependencia conflictiva en commons-httpclient, por lo que debe permanecer en tiempo de compilación.

Entonces, ¿cómo se puede resolver esto? - Versión commons-lang 2.5 en pruebas y 1.0.1 en tiempo de compilación.

Respuesta

6

intentan definir 2 etiquetas diferentes <dependency> con diferentes versiones y alcances. Use la etiqueta <scope>test</scope> dentro de la dependencia para las pruebas y <scope>compile</scope> para la compilación.

+0

Eso debería ser prueba no pruebas

+0

¡Funcionó! Gracias. En el plugin m2eclipse tengo '(omitido para conflicto bruja 2.5) [compile]' en la subcategoría commons-httpclient, pero esto es probablemente problema m2eclipse – Xeon

+0

Esto no funciona para mí, y no sé por qué - http: // stackoverflow .com/questions/9364511/maven-different-dependency-version-in-test –

Cuestiones relacionadas