1

これに関連し。すべての POJO クラスを動的にマップする休止状態のデモを作成しています。上記の参照を見つけて、パッケージ マッピングのみからクラスをスキャンしようとしました。しかし、次のようなエラーが発生しています。

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Predicate
at com.telemune.util.StringUtil.getSessionFactory(StringUtil.java:44)
at com.telemune.generator.TableDescriber.describeTable(TableDescriber.java:33)
at com.telemune.generator.PojoGenerator.main(PojoGenerator.java:169)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Predicate
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 3 more

com.google.common_1.0.0.201004262004.jarを追加すると、次のようになりました。

 Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;
at org.reflections.Reflections.getTypesAnnotatedWith(Reflections.java:358)
at com.telemune.util.StringUtil.getSessionFactory(StringUtil.java:46)
at com.telemune.generator.TableDescriber.describeTable(TableDescriber.java:33)
at com.telemune.generator.PojoGenerator.main(PojoGenerator.java:169)

私はそこで質問したりコメントしたりすることができないので、ここで @MartinAubele、@Jonathan、@SergeyBrunov、@ArthurRonald に特別に質問しています。google-reflections を使用してパッケージをスキャンできる例または何かを教えてください。

注意してください:私はSpringを使いたくありません。だから、それについて提案しないでください。前もって感謝します。

いくつかのコード サンプル:

SessionFactory sfactory = null;
ServiceRegistry serviceRegistry=null;
Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
Reflections reflections = new Reflections(PojoGenerator.pkgName);
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);
for(Class<?> clazz : classes)
{
    configuration.addAnnotatedClass(clazz);
}
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

    sfactory = configuration.buildSessionFactory();

もう 1 つの問題は次 のとおりです。configuration.buildSessionFactory(); configuration.buildSessionFactory(serviceRegistry); の使用を許可していません 。

4

1 に答える 1

0

Reflectionsライブラリの有効なバージョンを使用する必要があります。

reflections-0.9.10.jar

依存関係あり:

com.google.guava:guava:18.0

org.javassist:javassist:3.18.2-GA

com.google.code.findbugs:annotations:2.0.1

依存関係のリストは次の場所にあります: http://mvnrepository.com/artifact/org.reflections/reflections/0.9.10

またはMavenを使用するだけ

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.10</version>
</dependency>

ライブラリのソースとドキュメント:リフレクション

StackOverflow の回答からのさまざまなライブラリのテストを含むプロジェクトがあります (リンクが提供されているように):

休止状態-スキャナー-テスト

使用例Reflections: ReflectionsLibrary.java

すべてのライブラリのテスト クラス: ScannersTest.java

アップデート

修正するには

java.lang.NoSuchMethodError: org.hibernate.integrator.internal.IntegratorServiceImpl

Hibernate ライブラリの有効なセットが必要なだけです。たとえば、Hibernate 4.3.5 の場合: libs_h4

于 2016-05-13T09:30:36.983 に答える