コモンズに依存するプロジェクトがあります-httpclient[2.0](コンパイル)。
いくつかのjbehaveテストを書きたいです-jbehave-core3.4.5(テスト)。この依存関係は両方ともcommons-langに依存しますが、バージョンは異なります-1.0.1と2.5。
mvnパッケージを実行すると、テストセクションに[BUIDFAILURE]が表示されます。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はテストでjbehave-coreからではなくcommons-httpclient(コンパイル)からcommons-langを使用するのですか?
commons-httpclientでこの競合する依存関係を除外する余裕はないので、コンパイル時にとどまる必要があります。
では、これをどのように解決できますか?--commons-テストではlang2.5バージョン、コンパイル時は1.0.1。