2012-02-26 2 views
2

私はクラスフォルダの下に同じクラスファイルを持ち、libフォルダのjarファイルにもあります。しかし、クラスはjarファイルから取得されています。これが当てはまると、クラスフォルダの下のクラスはjarファイルより優先されます。少なくともこれは私がグラスフィッシュで見た行動です。しかし、これはtomcatの動作ではありません。クラスフォルダの下にあるクラスに環境設定を与えるためにTomcatの場合には設定を行う必要がありますか?私はtomcat 6.0.26を使用しています。Tomcatのlibフォルダではなく、classesフォルダからクラスを取得する設定ですか?

+0

.classファイルを2か所に配置する必要があるのはなぜですか。私はそれが問題を求めていると思う。あなたが1か所にいるなら、あなたはすべての混乱を取り除くでしょう。 – duffymo

+0

実際にオープンソースのプロジェクトです。変更したクラスをクラスフォルダ –

+0

に入れたいだけです。オープンソースファイルを変更したが、まだCLASSPATHにJARファイルを置いていますか?あれは正しいですか? – duffymo

答えて

3

仕様(2.4)は言う:

Webアプリケーションのクラスローダは最初 WEB-INF/classesディレクトリからクラスをロードした後、 WEB-INF/libディレクトリ内のライブラリJARファイルから必要があります。

Tomcatが最初にjarからロードされると、仕様に準拠していません。

Its documentationは言う:

はそのため、Webアプリケーションの観点から、クラスまたは リソース負荷はこの順序で、次のリポジトリになります。あなたのJVMの

  • ブートストラップクラスを
  • システムクラスローダークラス(上記)
  • /WEB-INF/Webアプリケーションのクラス
  • 012 Webアプリケーションの
  • /WEB-INF/lib/*.jar(前述)
  • 共通のクラスローダクラス

だから私はあなたがそのような行動を見ている驚いています。クラスがTomcat独自のクラスパスのいくつかのjarファイルにないことを絶対に確信しているならば、バグレポートを提出してください。これを行う前に、Tomcatの作業ディレクトリをクリアするか、Tomcatの新規インストールから開始することも忘れないでください。

回避策はもちろん、クラスのロード順序に頼る代わりに、変更されたクラスを組み込むようにjarファイルを再パッケージすることです。

+0

あなたが言ったように、クラスがTomcat独自のクラスパスのいくつかのjarファイルにないことが絶対に確かであれば。 Tomcat独自のクラスパスでクラスがいくつかのjarファイルにないかどうかを確認する必要があります。これを尋ねて申し訳ありません? –

+0

クラスを知ることは役に立ちます。また、 'TheClass.class.getClassLoader()'が返すものを参照してください。また、 'TheClass.class.getProtectionDomain()。getCodeSource()。getLocation()'の結果を見てください。 –

+0

@JBNizetスタンドアロンアプリケーションではどうすれば実装できますか? – Vipin

関連する問題