Maven 2 - разные версии зависимостей при тестировании и компиляции

У меня есть проект, который зависит от commons-httpclient [2.0] (компиляция).

Я хотел бы написать несколько тестов jbehave - jbehave-core 3.4.5 (test). Обе эти зависимости зависят от commons-lang, но в разных версиях - 1.0.1 и 2.5.

dependency

Когда я выполняю пакет mvn, я получаю [BUID FAILURE] в разделе тестов. Существует исключение для моей тестовой строки в файле surefire-plugin:

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

Как я посмотрел в исходном коде - в commons-lang 1.0.1 - действительно, нет метода StringUtils.substringBeforeLast(...). Почему maven использует commons-lang из commons-httpclient (компиляции), а не из jbehave-core в тестировании?

Я не могу позволить исключить эту конфликтную зависимость в commons-httpclient, чтобы она оставалась во время компиляции.

Итак, как это можно решить? - commons-lang 2.5 версия в тестировании и 1.0.1 во время компиляции.

Ответ 1

попытайтесь определить 2 разных тега <dependency> с разными версиями и областями. Используйте тег <scope>test</scope> внутри зависимостей для тестов и <scope>compile</scope> для компиляции.