0

この NoClassDefFound エラーが原因で、webapp のページを (Tomcat 7.0.2.6 でローカルに) ロードできません。私は原因が何であるかを理解しようとしているので、私が知っていることは次のとおりです。

私の同僚は、このプロジェクトをローカル (Tomcat) と開発サーバー (WebLogic) で正常に実行しています。

私はsvnから新しいプルダウンを行ったので、私のコードは彼のものとまったく同じです. Aspose への共有ライブラリ参照があること (および必要な .jar がそこにあること) と、weblogic.xml にそのエントリがあることを確認しました。

Aspose ライブラリの名前が間違っていたため、最初に WebLogic にデプロイしたときに同じエラーが発生しましたが、彼の Tomcat サーバーではローカルで正常に動作しました。

プロジェクトのクリーニングと再構築を試みましたが、効果はありませんでした。

私が理解できる限り、Tomcat の問題か、Eclipse の設定のいずれかである必要があります。

誰かが同様の状況に遭遇しましたか? これを解決しようとするアイデアはありますか?

4

2 に答える 2

1

最初に行う必要があるのは、同じ名前とパッケージを持つ別のクラスと衝突しているかどうかを判断することです。これを行う最も簡単な方法は、cygwin/linux コンソールを使用することです。このシェル スクリプトを、findjar などのファイルに保存します。

find "$1" -name "*.jar" -exec sh -c 'jar -tf {}|grep -H --label {} '$2'' \;

それをパスに入れてサーバーインスタンスのルートに移動し、次のようにスクリプトを実行します

findjar . yourclass

期間に注意してください、忘れないでください。これは、プロジェクトに同じ名前のクラスが複数ある場合に返されます。

プロジェクトがクリーンで、クラスのコピーが 1 つしかないことを確認したら、実際に共有ライブラリ フォルダーを Websphere サーバー インスタンスの JVM 引数に追加してみます。それを行うには:

  1. 管理画面に入り、サーバーをクリックします
  2. サーバー タイプを開き、websphere アプリケーション サーバーをクリックします。
  3. そこにサーバーがリストされているはずです。それをクリックします
  4. 右側に「サーバー インフラストラクチャ」セクションが表示され、その下に「Java およびプロセス管理」サブセクションがあります</li>
  5. そのセクションを開き、[プロセス定義] をクリックします</li>
  6. プロセス定義画面には、別の右側の列があります。「Java 仮想マシン」をクリック</li>
  7. はい、ようやく正しい画面に到達しました。ここに終わりが見えます。約束します
  8. 仮想マシンのページには、「クラスパス」というラベルの付いた大きなテキスト フィールドがあります。共有ライブラリ フォルダへのフル パスを入力する必要があります。

それは奇妙で意味がありませんが、コードが共有リソースのプロパティファイルを表示できるようにするために、過去にそうしなければなりませんでした。

于 2013-02-15T18:11:03.453 に答える
0

同僚がTomcatインスタンス自体にJavaライブラリをインストールしている可能性があります。

Tomcatディレクトリでいくつかのlibフォルダを確認してください(正確な場所は思い出せません。バージョンによって変わると思います)が、$ {CATALINE_HOME} / common/libのようなものです。

彼のTomcatインストールに異なるJARファイルがないことを確認してください。

この質問から:Tomcatは、2つのWebアプリにある場合、同じライブラリファイルをメモリに2回ロードしますか? それらは明らかにここに保存されています:

Tomcat 6 $CATALINA_HOME/lib
Tomcat 5 $CATALINA_HOME/common/lib
于 2013-02-15T17:42:14.307 に答える