概要
スタンドアロンJUnitテストの実行中にビルドパスに追加すると、サードパーティのjarファイルのクラスにアクセスできますが、動的Webプロジェクト内からプレーンオールドJavaオブジェクトを介してアクセスすると「 ClassNotFoundException 」になります。
- 使用したIDE:Eclipse
- Webサーバー:Apache 7
詳細
私のプロジェクトには、多くのサードパーティのjarファイル、つまりsqlite、eclipse jdt、jsoupが必要でした。私はこのプロジェクトをスタンドアロンプロジェクトとして作成しましたが、jarファイルのすべてのクラスに正常にアクセスできました。
しかし今、私は「src」フォルダ全体を「動的Webプロジェクト」にコピーしました。これらすべてのサードパーティのjarを含むフォルダ「jars」を作成し、次の手順に従って、これらすべてがビルドパスに追加されていることを確認します。
プロジェクトのプロパティ->Javaビルドパス->ライブラリ->jarの追加->jarフォルダからすべてのjarファイルを選択します。
Webプロジェクト内でスタンドアロンのJUnitテストを実行すると、これらのjarに正常にアクセスできます。このjunitテストは、決してサーバーを必要としないことに注意してください。
しかし、「サーバーで実行」しようとすると、すべてのサードパーティクラスで次のようなClassNotFoundExceptionが発生し続けます。
java.lang.ClassNotFoundException: org.sqlite.JDBC
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1672)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1517)
これは、アプリケーションがWeb上でどのようにデプロイされるかについての知識が不足していることと関係があると確信しています。