2009-04-08 6 views
1

Tomcatのバージョン:5.0.28 JDKは:1.5.0.14Tomcatがマニフェストファイルからクラスパスを選択カント

問題:私は両方の休止状態使用して 支柱い

は、我々は上にありませんこれらのライブラリの最新のバージョンと最高のバージョン したがって、両方ともapache-commonsライブラリの異なるバージョンが必要です。

私が考えている解決策:

使用マニフェストファイルと私のウェブアプリは Webアプリケーションとして展開されている各

のためのapache-コモンズの異なるバージョンを指定\ myappの

そして、 libは webapps \ myapp \ WEB-INF \ lib

次のように、hibernate3.jarのManifest.mfを変更しました

マニフェスト・バージョン:1.0

アーカイバ-バージョン:神経叢アーカイバ 作成したバイ:1.5.0_15-B04(日>マイクロシステムズ) のClass-Path:hibernatelib/SLF4J-API-1.5 .2.jar

とWEB-INF \ のwebapps \ myappのでSLF4J-API-1.5.2.jarを置く\ libに\ hibernatelib

今、私が期待することSLF4J-API-1.5。 2.jarは自動的にハイバネート01と一緒にロードされますしかし、その動作していない... Tomcatが

上記のように質問.MFで指定されたjarファイルを見つけることができません:

  1. 私が何か間違ったことをやっているの?それともTomcatですか?
  2. この問題を解決する別の方法はありますか?

私はすでに試してみました\は私がSLF4J-API-1.5.2.jarを置く場合は、次の

  1. がファイル
  2. の最後に改行文字をチェックチェックしますマニフェストファイル内ので、私は、この特定のjarファイル
  3. は相対しようとした見つけることがそのことはできません知っているaway-行くエラーフォルダ - メインlibに、絶対パス

答えて

0

マニフェスト内のClass-Path属性が使用される唯一の場所は、マニフェストを含むjarが( "java -jar theFile.jar")を使用する実行可能なjarと呼ばれる場合です。

サーブレットコンテナの中には、それをサポートしているようですが、to this mailing list postによると(それほどすばらしい検索結果が見つかりませんでした)、仕様にも指定されていません。

私が理解している限り、Webアプリケーションは一般に、単一のクラスローダーを使用してクラスをロードします。依存関係の問題を「正しく解決」するには、少なくとも2つの異なるクラスローダーが必要です。

ハッキング解決策は、jarjarまたは類似のツールを使用して、さまざまなライブラリをそれぞれの依存関係とともにパッケージ化することです。

したがって、Apacheの共有ライブラリと一緒にHibernateを含むjarと、apache-commonsライブラリとともにstrutsを含むjarを生成します。 apache-commonsライブラリの各コピーは、異なるクラスバージョンの問題を解決するために、異なるパッケージ(おそらくhibernate.org.apache.*struts.org.apache.*)に移動されます。

+0

申し訳ありません - 私は何をしようとしていますか? 私は2つの異なるライブラリ間に共有ライブラリを持っています どうすればそれらを照合できますか? –

+0

Kool これは役に立ちます 私はあなたの答えを上げようとしましたが、十分な担当者がいませんでした:) –

+0

問題はありません。 –

0

あなたは正しいアクセス権をチェックしましたか?また、今日の早い時期に私が助けてくれた最後のClass-Pathラインの後に改行があることを確認するアイデアかもしれません!


更新:Tomcatは、このようなクラスパスの宣言をサポートしていない場合は、心にバネ唯一のものは、クラスローダをいじり必要とします。個人的には私はそれをしません - その経路の下に潜在的な痛みの世界全体があり、あなたはおそらくアップグレードするだけのほうが簡単でしょう。申し訳ありませんが、私はより良い答えを考えることができません!

+0

はい - 改行を確認しました。 どのようなアクセス許可を確認する必要がありますか? –

+0

@ http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.htmlの仕様をチェックしてみてください。各エントリの後に改行があることを確認する必要があります。それは文法にあります。 – Brabster

+0

申し訳ありません、おそらく許可はありません。私はいくつかの参考文献を見てきましたが、TomcatはWEB-IN/libのマニフェストファイルで宣言されているクラスパスを無視します。 – Brabster

0

最新の最新バージョンのTomcatを試しても問題が解決しない場合は、 Tomcat 6はすでに5.5年か5.0年のうちに数年前です。

+0

まだありません。 私はそれを試して、問題がなくなるかどうか確認することができますね。 しかしそれは本当に私を助けません。今すぐTomcatをアップグレードすることはできません。 –

0

私はあなたがこれを行うことはできないと思います。 TomcatはCLASSPATHの問題を決めるJARマニフェストを見ていません。クラスローダーの独自の階層を使用して、CLASSPATHと呼ばれるものを使用して、必要なものを探し出します。

アプリのさまざまな部分に異なるバージョンのJARが必要な場合は、本当にOSGiが必要な人のように聞こえます。それは解決するために発明された問題です。

そこにはtwo competing JSRsがありますが、Sunのモジュール提案の実装についてはわかりません。

あなたがこれを行うことができると知っている1つのアプリサーバーはSpring's DM serverです。彼らが強化しているTomcatのフォークです。