2009-07-08 45 views
3

私は、リモートのTomcat 6.0サーバーでテストしているときに、多くの依存関係(18メガバイトのJARファイル..)その19メガバイトの依存関係をアップロードする必要はなく、クラスをアップロードするだけです。かなり簡単ですね。SpringベースのWARのJAR依存関係を外部化して展開する

私はうんざりな仕事をすることはできません。

私はEclipse 3.4を使用しています.Java Build Path-> OrderとExportですべての依存関係のエクスポートを削除しても、すばらしい小さなWARが得られます。

だからここに私が試したものです:

私は、サーバーへのLIBSのすべてをアップロードし、とTomcatで共通/ libにそれらを立ち往生。ディレクトリが存在していなかったので、私はそれを作成し、catalina.propertiesを修正:

shared.loader=${catalina.home}/common/lib/*.jar 

私は他のconfigsの束を試してみたが、どれも働きました。サーバーを再起動すると、展開されたwarは起動に失敗します。具体的には:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderList$java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener  at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1 

Log4Jリスナーをロードしようとすると、そのクラスパスで見つけることができません。リスナーが入っているspring libはcommon/libにあります。

また、完全な18メガバイトの戦争を展開すると、うまく動作します。すべてのinitsとアプリが始まります。もちろん、ローカルでもうまく動作します。

私は、ハードコードされたロギングJARをextrasフォルダから外したものと置き換えて、Log4jを動作させました。

ここにヘルプがありますか?なぜこれが動作していないのか分かりません。

答えて

0
  1. WEB-INF/libは空ですか?
  2. log4j.jarはどこですか?
  3. spring.jarはどこですか?

これは、クラスローダーの可視性の問題のようです。

4

"私は、たくさんの依存関係(18メガバイトのJARファイル..)を持っているSpringアプリケーションを持っています - リモートTomcat 6.0サーバーでテストしているときに、メガバイトの依存関係を持ち、クラスをアップロードするだけです。

私はこれを理解していません.19MBはではなく、です。あなたはWARをパッケージ化するほうがずっと良いでしょう。

独自の同一のTomcatインスタンスでローカルにテストを行い、すべての機能を有効にして、WARをリモートのTomcatインスタンスにデプロイすることをお勧めします。

更新:これらのJARをTomcatの/ libディレクトリに置くことの1つの問題は、そのインスタンスにデプロイするすべてのアプリケーションがそれらのJARを見るようになりました。個々のWEB-INF/libにJARファイルを置くと、他のファイルに影響を与えることなく各アプリケーションを変更できます。コストはJARとディスク領域が重複しているため安価です。

devl-> test-> prodから移行する必要がある場合は、アプリケーションが機能するためには、すべての環境に同じJARがデプロイされている必要があります。あなたは迷っています。あなたのアプリは、依存関係を利用できるかどうかによって決まります。彼らがサーバー上にない場合、あなたは運がないです。あなた自身の手で制御し、WARファイルにJARをパッケージ化してください。

+0

これは実行可能です。 しかし、問題は、リモートサーバ(現時点ではプロダクションではなく、リモートからのdevサーバの設定)にデプロイするにはかなりの時間がかかります。jarファイルをWARファイルに保存するのがベストプラクティスであれば、すべてのアプリケーションで共有されるものはSpring、Hibernateなどのようなものです。これは共有アプリケーションサーバーではなく、このアプリケーションで使用されています。 –

+0

また、VistaデベロッパーボックスをDebian EC2サーバーインスタンスと同じにするのは難しいです。はい、私はローカルにVBoxをセットアップすることができました。それは良いアイデアかもしれませんが、私がやったことではありません。 –

+0

devboxが "同一"である必要はないと思いますが、ローカルで実行されているTomcatのJVMとバージョンが同じであることを除いては同じです。仮想マシンは不要です。単にTomcatのローカルインスタンスをインストールし、それを使用して展開しながら展開してください。バージョン管理システムを使用している場合は、テスト、コード、デプロイ、デバッグ、コミット、リンス、リピートなどのきめ細かな開発ループを行うことができます。 – duffymo

1

Webサーバー環境のような依存関係を外部化することに注意する必要があります。サーバーによっては、正常に起動するように見えても、予期せぬクラスローディングの問題が発生する可能性があります。

私はduffymoに同意します... 19MBはそれほど大きなものではありません...これをやりたがっている理由がありますか?私はそれをお勧めしません。

0

duffymoとcjstehnoを聞く。

tomcatにジャーを追加することは、災害のための正しいレシピです。

webappsディレクトリにjarファイルを保存します。

+0

なぜそれは災難ですか? –

0

Tomcatがjarファイルを見つけることができないのは奇妙です。とにかく、すべてのjarファイルをcommonフォルダ($ {catalina.home}/lib)に置きます。 (これはshared.folderを使用するより悪いですが、それはあなたのために働くはずです)。

もちろん、他の人が言ったように、運用システムではそうしてはいけません。とにかく、本番システムで大規模なテストを行う必要がある場合は、開発システムにとっては問題ないと思います。

もう1つ注意してください。サーバーの完全な制御権を持ち、唯一のアプリケーションをインストールしている場合にのみ、これを行う必要があります。

1

ファイルには、例えば、フォルダ

への直接アップロード

/パスに-tomcatに/ webappの/ myappに/

/-へのパスを保つのwebappフォルダ

を見つけます-tomcat/webapp/myapp/WEB-INF/libフォルダに移動し、ur/path-to-tomcat/webapp/myapp/classesフォルダの変更をアップロードします。

次に、tomcatマネージャを使用してtを再起動します。彼のアプリ

0

なぜあなたはtomcatのデフォルトの$ {shared.loader}プロパティを変更しますか?

1

もう一度、ターゲットサーバー上の$ {CATALINA_HOME}/webapps/< your-app >に更新情報を送信することをお勧めします。 WARは本番環境用のものですが、接続が遅く、大きなWARがあれば面白いです。

もちろん、アップデート後にWebアプリケーションを再起動したいと思うでしょう。開発モードのTomcatはいくつかのファイルを監視して変更を行います。デフォルトではWEB-INF/web.xmlはその1つなので、更新中のものと一緒にそれを更新し、すぐにアプリケーションを再起動する必要があります。ピンチでは、ManagerのWebアプリを使用してアプリを起動させることができます。

管理と利便性を向上させるために、TomcatのAntタスク(ant!には含まれていないTomcatディストリビューションの近くにあります)を使用してサーバーを再起動し、変更を展開することもできます。いくつかの手抜きを取りますが、これはあなたが行っているプロジェクトごとに再利用したいので、十分価値があります。

関連する問題