1

まず第一に、私は HBase と Jetty 8 が初めてです。

私は、Hbase 0.94.xx と組み込みの Jetty 8.x をうまく連携させようとしています。

Lars からサンプル コードを取得し、0.94 を使用するように Hush を更新しました。これは、私が行った HBase 0.94 の更新です。 https://github.com/yepher/hbase-book/blob/master/hush/pom.xml Jetty のバージョンを「7.3.1.v20110307」から「8.1.4.v20120524」に変更すると。「Credential」のコンパイル エラーは、インポートを変更することで簡単に解決できます。ハッシュサーバーは正常に起動しますが、最終的に次の例外が発生します:

Exception in thread "main" 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:601)
    at
org.eclipse.jetty.util.log.JettyAwareLogger.warn(JettyAwareLogger.java:425)
    at org.eclipse.jetty.util.log.Slf4jLog.warn(Slf4jLog.java:64)   at
org.eclipse.jetty.util.component.AbstractLifeCycle.setFailed(AbstractLifeCycle.java:199)
    at
org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:69)
    at com.hbasebook.hush.HushMain.main(HushMain.java:112)

これは、「sl4j を含む」の maven からの出力です。

[hush (master)]$ mvn dependency:tree -Dincludes=org.slf4j
Unable to find a $JAVA_HOME at "/usr", continuing with system-provided Java...
[INFO] Scanning for projects...
Downloading: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-maven-plugin/8.1.4.v20120524/jetty-maven-plugin-8.1.4.v20120524.pom
Downloaded: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-maven-plugin/8.1.4.v20120524/jetty-maven-plugin-8.1.4.v20120524.pom (7 KB at 14.5 KB/sec)
Downloading: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-integration-project/8.1.4.v20120524/jetty-integration-project-8.1.4.v20120524.pom
Downloaded: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-integration-project/8.1.4.v20120524/jetty-integration-project-8.1.4.v20120524.pom (12 KB at 298.1 KB/sec)
Downloading: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-maven-plugin/8.1.4.v20120524/jetty-maven-plugin-8.1.4.v20120524.jar
Downloaded: http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-maven-plugin/8.1.4.v20120524/jetty-maven-plugin-8.1.4.v20120524.jar (70 KB at 758.4 KB/sec)
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building HBase URL Shortener 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ hush ---
[INFO] com.hbasebook:hush:war:1.0
[INFO] \- org.apache.hbase:hbase:jar:0.94.3:compile
[INFO]    +- org.slf4j:slf4j-api:jar:1.4.3:compile
[INFO]    \- org.slf4j:slf4j-log4j12:jar:1.4.3:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.987s
[INFO] Finished at: Tue Mar 05 09:51:40 CST 2013
[INFO] Final Memory: 8M/81M
[INFO] ------------------------------------------------------------------------

SL4Jを除外する、SL4jを明示的に含めるなど、多くのことを試しました。シンプルなものが欠けていると確信していますが、それが何であるかはよくわかりません。

別の参照点として、このプロジェクトhttps://github.com/steveliles/jetty-embedded-spring-mvc-noxml/blob/master/pom.xmlを試しましたが、HBase/core を pom.xml に追加すると取得し始めます上記と同じ問題。

Jetty 8.x と HBase 0.94.xx で動作する pom.xml を持っている人はいますか?

編集:

slf4j の除外をさらに追加し、明示的に slf4j を含めました

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.4</version>                        
</dependency>

ここで Huch プロジェクトを作業コードで更新しました: https://github.com/yepher/hbase-book

4

1 に答える 1

1

この例外はLocationAwareLogger、クラスパスに異なるバージョンのクラスが複数ある場合に発生します。libディレクトリでagrep -R LocationAwareLogger *.jarを実行するだけで、クラスを含むjarを特定できます。次に、でそれを除外できますpom.xml

編集: あなたのレポをダウンロードして、自分のマシンにインストールしました。コマンドを実行した後、grep次の出力が得られました。

eric@localhost:hbase-book$ grep -R 'org/slf4j/spi/LocationAwareLogger' hush/target/hush/WEB-INF/lib/*.jar
Binary file hush/target/hush/WEB-INF/lib/slf4j-api-1.6.4.jar matches
eric@localhost:hbase-book$ grep -R 'org/slf4j/LoggerFactory' hush/target/hush/WEB-INF/lib/*.jar
Binary file hush/target/hush/WEB-INF/lib/slf4j-api-1.6.4.jar matches

slf4j間違ったgroupId/artifactId組み合わせを使用して完全に除外していないようです。pom を更新して再度テストする必要があります。

jetty に含まれるログ ライブラリのバージョンが hbase と競合する可能性があることに注意してください。一般的な解決策はありません。使用するバージョンを特定し、他のバージョンを除外する必要があります。

于 2013-03-05T16:18:48.860 に答える