web-dev-qa-db-ja.com

異なるパスを使用してTomcatにwarファイルを展開する

例えばfoo-bar-1.1.2.warと呼ばれるwarファイルをTomcatにデプロイする場合、どのようにデプロイすることができますかwebapps/barに抽出され、そのURLルートは/ bar /...

ここでの私の意図は、warappファイルをバージョン情報とともにwebappsサーバーに保持して、インストールされているバージョンを知っているが、アプリの以前のバージョンを上書きするようにすることです。

PSI Probe を使用してwarファイルを展開できました。これにより、Webアプリのターゲットコンテキストを指定できます。ただし、これは、warファイル名のバージョン情報が失われることを意味します。

24
z12345

Tomcatは常にwarファイルの内容を同じ名前のフォルダーに抽出します(warsをデプロイするように構成されている場合-デフォルトなど)。

任意のフォルダ名に抽出できます。したがって、foo.warのコンテンツを手動でbar/というフォルダーに解凍すると、単にWebアプリフォルダーにwarをドロップするのではなく、Webアプリケーションがロードされます。

ただし、アプリケーションのコンテキストルート要素をオーバーライドすることで、フォルダー/ warファイル名をまったく変更せずにアプリケーションのURLパターンを指定できるため、これはまったく不要です。

これは多くの場合、Tomcat server.xmlで設定されますが、その慣行はかなり推奨されていません。代わりに、Webアプリケーション/ WARファイルのMETA-INFフォルダーでcontext.xmlを使用することをお勧めします。

<Context path="/bar" .../>

アプリケーションをデプロイしたら、context.xml/conf/Catalina/localhostにコピーする必要がありますが、foo.xmlに名前を変更する必要があります

Conextルートは一意である必要があり、autoDeployまたはdeployOnStartup操作を使用している場合は追加の考慮事項があることに注意してください(ソース http://Tomcat.Apache.org/Tomcat -7.0-doc/config/context.html )。


その他のオプションは次のとおりです。

  • 展開ごとにWebアプリフォルダーをクリーンアップし、新しいfoo-1.1.0 warをドロップします。
  • フラットファイルにバージョン番号を含めます。 foo/version1
  • または、単に構成/ XMLファイルにバージョンを含めます。

また、Ant(または同等のツール)を使用してデプロイメントを自動化(および上記のいずれかを実行)することもできます。

24
Michael

コンテキストフラグメント定義のpath属性について強調する重要なポイントがあります。 トピックに関するドキュメント を引用するには:

AutoDeployまたはdeployOnStartup操作がホストによって実行される場合、Webアプリケーションの名前とコンテキストパスは、Webアプリケーションを定義するファイルの名前から派生します。

deployOnStartupはTomcatホストのデフォルトの動作です

ドキュメントに従うには、これは非常に重要な結果をもたらします。

コンテキストパスを_META-INF/context.xml_で定義することはできません

Tomcatコンテキストの定義 の方法によると、これは2つのソリューションのみを許可します。

  • In individual files (with a ".xml" extension) in the $CATALINA_BASE/conf/[enginename]/[hostname]/ directory
  • _Inside a Host element in the main conf/server.xml_。これは、サーバーを再起動する必要があるため、本番環境では推奨されないソリューションです

別のソリューションは unpackWARs属性 を利用します。

私の観点では、これらの理由から、本番環境で微妙なパスを実装する一般的で簡単な方法は、 naming のwarファイル(バージョン管理を含み、ソリューションになる可能性があるもの)を利用することですあなたの問題に)。 warファイル名の単一のシャープ(たとえばtest#path.war)は、コンテキストパス(たとえば/ test/path)。ダブルシャープはバージョン番号を示します(例:test#path ## 112.war)。これは、warファイルの展開、ホットデプロイの有無にかかわらず機能し、デプロイに依存せず(マネージャーまたはファイルシステム)、同じアーカイブの複数のバージョンを管理します。

ただし、アーカイブ名とは異なるパスを使用する必要がある場合、唯一の解決策は_/conf/[enginename]/[hostname]/_ディレクトリまたは_server.xml_ファイルの記述子であるようです。そのためには、サーバーファイルシステムへのアクセスが必要です。

関連するソリューションは、Tomcatの日常の設定および管理方法に大きく関連しています。

12
bdulac

Warファイル名にバージョン情報を含めるだけの場合は、my-app##1.2.3.warのように名前を付けることができます。ディレクトリmy-app##1.2.3に展開されますが、コンテキストはmy-appになります(つまり http:// Host/my-app / )。

少なくともTomcat 7.0.55で動作します

5
Peter Clause