私は、他のコードの中でも特に多数のサーブレットを含むアプリケーションの開発に取り組んでいます。私が使用している開発環境は Eclipse (3.2.1、かなり古い) であり、タスク用の Eclipse Tomcat Wrapper プラグインを使用して Tomcat サーバー (5.5.23、これもかなり古い) を実行しています。これらはすべて、RedHat 5.2 Linux システムで実行されます。
私が使用している Java ランタイムは JDK 1.6.0(21) です。これはごく最近 (以前の JDK 1.5 バージョンから) アップグレードしたもので、覚えている限りでは、上記のソフトウェアの組み合わせ (使用しているアプリケーションと一緒に) ) 実際に動作しました: Tomcat サーバーを起動できました。エラーや苦情なしで起動し、アプリケーションのサーブレットはポート 8080 で利用できました。
ただし、どこかで何かが変更されています (アプリケーションの jar ファイル自体にある可能性があります。ホスト上のすべてのものが根本的な原因であるとは思えません)。ここで、Tomcat サーバーを起動しようとするとsun.misc.InvalidJarIndexException
、コンソール出力にエラーが表示されます。これは、次のクラスとメソッドで発生します。
org.apache.commons.modeler.Registry registerComponent
(3回発生)org.apache.catalina.core.StandardServer initialize
(1回発生)org.apache.catalina.connector.Connector start
(2回あります)
Java クラスの JAR が有用であることを確認する方法に関するこのスタック オーバーフローの質問を見つけました。また、提案された問題のある JARS を追跡するために数回実行しfind /usr -name \*name-of-suspected-jar\*.jar
ました。また、Eclipse で Tomcat サーバーのランタイム構成を確認しようとしましたが、システム上の JAR ファイルと、CLASSPATH
どちらの Tomcat ランタイム セットアップ (またはCLASSPATH
Eclipse の起動時に環境で使用される) とも一致しませんでした。 その努力には、おそらく私の側でもう少し厳密さが必要ですが、それを行う前に(そのため、現在、 s に関するすべての詳細をCLASSPATH
ここに投稿していません)、実際に何が起こっているのかを正確に読み上げましたInvalidJarIndexException
.
そのため、JAR ファイルには、JAR ファイルで検索するクラス (およびメソッド) に関する情報を含むオプションの INDEX.LIST ファイルが含まれる場合があります。CLASSPATH
アイデアは、多くの状況で役立つすべての JARS で検索を短絡することです。問題は、INDEX.LIST
ファイルが破損している (または破損していると思われる) 場合で、クラスのロードが完全に放棄され (クラスローダーは .xml 内のすべての JAR を検索するようにフォールバックしませんCLASSPATH
)、エラーが発生InvalidJarIndexException
します。投げられる。さらに厄介なことに、JAR が検索される順序は、クラス ローダーがINDEX.LIST
ファイルを処理する方法に影響を与える可能性がありINDEX.LIST
ます。1 つの JAR のファイルが他の JARS を参照する可能性があり、JARS を参照するファイルが最初の JAR と同期していない場合INDEX.LIST
ファイルの場合、クラス ローダーはこのInvalidJarIndexException
エラーで失敗します。
したがって (このStackOverflowの質問によると)、このエラーは、JAR ファイルに破損INDEX.LIST
した .以前に検索された JAR がクラス ローダーを混乱させたためです。(別の言い方をすれば、この例外は、システムの他の場所に違反者がいるために、「無実の」破損していない JAR ファイルに対してもスローされる可能性があります)。INDEX.LIST
INDEX.LIST
それで、単なる小説を書いた後、ここに私の主要な一連の質問があります:
- それぞれがスローされる正確な
.jar
ファイルを追跡する最良の方法は何ですか?InvalidJarIndexException
.jar
ランダムに選択されたファイルにファイルがあるかどうかを確認する最善の方法は何INDEX.LIST
ですか? このタスクにはどのようなツールがありますか?- ファイルの検索順序を自動的に推測する効率的な方法はあり
.jar
ますか? 手動でフォローすることもできますCLASSPATH
が、正直なところ、エラーが発生しやすく、面倒です。 - クラスローダーを混乱させて、検索の後半で
.jar
無実の破損していないファイルが不正なファイルであると非難する可能性がある、検索順序にあるファイルを把握する効率的な方法はありますか?.jar
INDEX.LIST
免責事項: 私は古いバージョンのソフトウェアを実行していることを知っています (Redhat 5.2 の最新の更新プログラムがインストールされている場合でも)。多くの人が、これをデバッグするのに何の努力もしていないことを提案するのが反射的な反応であることを知っています。代わりに、Tomcat、Eclipse、および Linux のより新しいバージョンにアップグレードします (Java は最近のものです)。そうしたくない理由は、物事を調べた結果、アップグレードを行ったり、現在使用している RHEL5.2 提供の Tomcat/Eclipse の隣に別の最新の Tomcat または Eclipse をインストールしようとしたりするのはかなり面倒だとわかったからです。また、この種のトラブルシューティングは、Java とそれに関連するツールや機能について、役に立つ核心的な詳細を学ぶ機会だと考えています。クラスのロードがどのように機能し、何がこれをスローするのかを理解するInvalidJarIndexException
私のシステムでは非常に教育的です!
(しかし、このトラブルシューティングが失敗した場合は、最新の Linux、Eclipse、および Tomcat を使用することを真剣に検討します...約束します)