1

hibernate 4 で hibernate-shards を使用しようとしていますが、クラスが見つからないというエラーが発生します。シャード データベースに書き込もうとするサンプル アプリケーションを実行すると、次の例外が発生します。

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/engine/SessionFactoryImplementor
at org.hibernate.shards.ShardedConfiguration.buildSessionFactory(ShardedConfiguration.java:251)

私のMaven POMファイルの関連セクションは次のとおりです。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.0.0.Final</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>4.0.0.Final</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.18</version>
</dependency>

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-shards</artifactId>
    <version>3.0.0.Beta2</version>
</dependency>

hibernate-core jar ファイルを調べると、このクラスのパッケージは hibernate-shards が期待しているものとは異なるようです。現在、spiディレクトリにあるようです。

$ jar tvf lib/hibernate-core-4.0.0.Final.jar  | grep SessionFactoryImplementor
   3049 Wed Dec 14 22:47:16 EST 2011 org/hibernate/engine/spi/SessionFactoryImplementor.class

hibernate-shards と Spring Framework を使用している人々が同様の問題を抱えているという別の質問を見つけました。私はSpringを使用していないので、その質問に対する解決策がうまくいくとは思いません。


この質問の回答は、休止状態のシャードのフォークを使用して最新バージョンの休止状態を操作できることを示唆していますが、その回答のフォークへのリンクは現在エラーになっています。


ソース (github から複製) から最新バージョンの hibernate-shards をコンパイルすることで問題が解決することを期待していました。しかし、次のように作成した hibernate-shards-4.0.0-SNAPSHOT を使用すると、同じ例外が発生します。

# Get the hibernate-shards code
git clone https://github.com/hibernate/hibernate-shards.git
cd hibernate-shards

# Install the gradle build system.  The following commands are for Ubuntu
sudo add-apt-repository ppa:cwchien/gradle
sudo apt-get update
sudo apt-get install gradle

# Compile the hibernate-shards project
gradle :jar :javadoc :sourcesJar
jar cf build/libs/hibernate-shards-4.0.0-SNAPSHOT-javadoc.jar -C build/docs/javadoc/ .

# Install hibernate-shards into maven
mvn install:install-file -DgroupId=org.hibernate -DartifactId=hibernate-shards -Dversion=4.0.0-SNAPSHOT -Dpackaging=jar -Dfile=build/libs/hibernate-shards-4.0.0-SNAPSHOT.jar -Djavadoc=build/libs/hibernate-shards-4.0.0-SNAPSHOT-javadoc.jar -Dsources=build/libs/hibernate-shards-4.0.0-SNAPSHOT-sources.jar

gradle ファイルを見ると、Hibernate 4 ではなく、Hibernate 3.6.10.Final に対してビルドされています。


この時点で、休止状態のシャードは休止状態 4 と互換性がありませんか?

4

0 に答える 0