3

自動テストに Jetty サーバーを埋め込もうとしているので、プロジェクトに次の依存関係を追加しました。

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-servlet</artifactId>
  <version>7.6.13.v20130916</version>
  <scope>test</scope>
</dependency>

Web アプリは Java 6、サーブレット 2.5 を使用するため、Jetty 7 を使用しています。

ただし、組み込みの Jetty サーバーを起動しようとすると、次のようになります。

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
    at org.eclipse.jetty.util.log.JettyAwareLogger.log(JettyAwareLogger.java:607)
    at org.eclipse.jetty.util.log.JettyAwareLogger.warn(JettyAwareLogger.java:431)
    at org.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:69)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed(AbstractLifeCycle.java:204)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:74)

何が問題なのかを理解しようとしていますが、これまでに行った手順のいずれも問題に対処していません。これまでに行ったことのリストは次のとおりです。

  • 推移的な依存関係を追跡して、互換性のないバージョンのslf4j-api
  • slf4j-api(1.5.11、1.6.1、1.6.4、1.7.5)の異なるバージョンを試してください。
  • Jetty 7 のいくつかのソース、特に pom.xml を調べたところ、slf4j 1.6.1 への依存関係があることがわかりました。
  • この同様の質問を調べてnull、印刷しようとしたときに取得しorg.slf4j.spi.LocationAwareLoggerorg.slf4j.Marker

誰かがこの問題について新たな洞察を提供してくれることを願っています。ありがとう。

4

2 に答える 2

4

jar間の互換性の問題に直面したことがあると思います。最終成果物の出力をsl4j調べてみてください。mvn dependency:treeおそらく、いくつかのsl4jjar の 2 つの異なるバージョンがあり、どちらが最初に読み込まれるかを予測できない場合があります。すべてのsl4jバージョンを均等化してください。


OP:これをどのように解決したかについては、ドキュメントを参照してください。

于 2013-09-28T22:30:41.473 に答える
3

madhead回答に関する情報は非常に役に立ちましたが、同じ問題に遭遇する他の人のために、私が行ったことの詳細を文書化します。

言及された答えが示唆したように、それはslf4j瓶の問題でした。確認するために、次のことを行いました。

  1. に依存するすべての依存関係の除外を定義しslf4jます。
  2. この提案のオプション 2 に従ってください。
    • sysout だけが自分で選んだ String である単体テストを作成し、その行にブレークポイントを定義しました。
    • 次に、JUnit テストとしてテストをデバッグし、表示ビューを開きます。
    • Display Result of Evaluating Selected Text何らかの理由で最初に無効になっていたため、再実行する必要がありました。
    • slf4j除外を指定したかどうかに関係なく、ランタイムがまだクラスパスに追加されている1.5.8 バージョンを参照していることがわかりました。
  3. 私が取り組んでいるプロジェクトは、私が取り組んでいる別のプロジェクト (マルチ Maven プロジェクト プロジェクトです) に依存しており、依存関係が に指定されslf4j-jdk14 1.5.8ているため、 に更新しました1.6.1
    • slf4j-apiバージョン 1.5.8 を参照していたため、 underの除外を指定しslf4j-jdk14 1.6.1、 に直接依存関係を追加する必要がありましたslf4j-api 1.6.1
于 2013-10-02T09:18:03.700 に答える