Hibernate (V3.3.2) を使用して HSQLDB からデータを読み取る Java (6) アプリケーションがあり、これを Eclipse (V3.5.1) でビルドおよびデバッグ/実行しましたが、正常に動作します。
次に、GWT (V1.7) サーブレット Web アプリを作成し、休止状態のクラスをそこにコピーして、同じユーザー ライブラリの依存関係を追加しました。ただし、サーブレットを実行して、コードを呼び出す URL にアクセスしようとすると、次のようになります。
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:152)
at xxx.daoimpl.DAOSession.initialise(DAOSession.java:40)
DAOSession.java:40 は次のとおりです。
AnnotationConfiguration config = new AnnotationConfiguration ();
このエラーをグーグルで検索すると、クラスパスから slf4j-api.jar が見つからないことが示唆されますが、デバッグ プロパティのコマンド ラインを見ると、この jar がそこに表示されます。
C:\java\jsedk_6\jre\bin\javaw.exe
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:54541
-Xmx512m -Dfile.encoding=Cp1252
-classpath
D:\dev\workspace\xxx\src;
D:\dev\workspace\xxx\resources;
D:\dev\workspace\xxx\war\WEB-INF\classes;
C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-user.jar;
C:\java\eclipse\plugins\com.google.gwt.eclipse.sdkbundle.win32_1.7.1.v200909221731\gwt-windows-1.7.1\gwt-dev-windows.jar;
C:\java\hibernate-annotations-3.4.0.GA\hibernate-annotations.jar;
C:\java\hibernate-annotations-3.4.0.GA\lib\ejb3-persistence.jar;
C:\java\hibernate-annotations-3.4.0.GA\lib\hibernate-commons-annotations.jar;
C:\java\hibernate-distribution-3.3.2.GA\hibernate3.jar;
C:\java\hibernate-distribution-3.3.2.GA\lib\required\antlr-2.7.6.jar;
C:\java\hibernate-distribution-3.3.2.GA\lib\required\commons-collections-3.1.jar;
C:\java\hibernate-distribution-3.3.2.GA\lib\required\dom4j-1.6.1.jar;
C:\java\hibernate-distribution-3.3.2.GA\lib\required\javassist-3.9.0.GA.jar;
C:\java\hibernate-distribution-3.3.2.GA\lib\required\jta-1.1.jar;
C:\java\hibernate-validator-4.0.1.GA\hibernate-validator-4.0.1.GA.jar;
C:\java\hibernate-validator-4.0.1.GA\lib\validation-api-1.0.0.GA.jar;
C:\java\hibernate-validator-4.0.1.GA\lib\log4j-1.2.14.jar;
C:\java\hsqldb\lib\hsqldb.jar;
C:\java\restlet-jse-2.0m5\lib\org.restlet.jar;
C:\java\restlet-jee-2.0m5\lib\org.restlet.ext.servlet.jar;
C:\java\restlet-jse-2.0m5\lib\org.restlet.ext.xml.jar;
C:\java\slf4j-1.5.8\slf4j-api-1.5.8.jar;
C:\java\slf4j-1.5.8\slf4j-log4j12-1.5.8.jar
com.google.gwt.dev.HostedMode
...
jar を開くと、そこに LoggerFactory クラスが表示されます。
クラスローダーで見つからない理由はありますか?
編集 1:コードから org.slf4j.LoggerFactory にアクセスしようとすると、Eclipse は正常にコンパイルされますが、実行時に同じエラーが発生します。
編集 2:同じコードを呼び出して実行するメインの Test クラスを追加すると、動作します。したがって、このクラスパスの問題はサーブレットに固有のようです。
ありがとう、ジョン