1

お客様のサイトでwarファイルをデプロイしています。Warファイルには、依存するjarを含むlibフォルダーが含まれています。

/lib/app-01.jar /lib/spring-2.5.1.jar /lib/somefile-1.2.jar.....。

app-01.jarをapp-02.jarに更新する必要がある場合、エレガントな解決策はありますか?これらの依存jarは、業界標準としてWARファイルにどのようにパッケージ化されていますか?

それらの依存するjarをバージョン番号なしでパッケージ化するのは良い考えですか?例えば

/lib/app.jar /lib/spring.jar /lib/somefile.jar.....。

編集注:実際、WarはWindowsまたはLinuxプラットフォーム上のWebshpere、WebLogic、Tomcatにデプロイされています。そして、お客様のIT部門が導入に関与しています

4

2 に答える 2

2

おそらく最も洗練された解決策は、新しい戦争を生成して展開することです。

理由は次のとおりです。

  • アップタイムが心配な場合は、一部のアプリケーション サーバーがサイド バイ サイド展開をサポートしています。これは、古いバージョンと同時に新しいバージョンを展開できることを意味します。そして、誰も使っていないときは古いものを止めてください。(私は 5 年前のように WebLogic でそれを使用していたので、現在では一般的な機能になっていると思います)。ただし、この種の機能は、新しい .WAR バージョンを展開する場合にのみ機能します。

  • おそらく WAR は Maven、Ant、または Gradle を使用して生成されたものであるため、mvn package通常、依存関係のバージョンを変更して実行する方が、WAR を解凍して変更し、再度圧縮するよりも高速でエラーが発生しにくくなります。

  • すべてのアプリケーション サーバーは、クラス ローダーを更新することで機能する「ホット リプレース」機能を提供します。開発には問題ありませんが、本番環境では問題が発生する可能性があります (クラスローダーのリークは一般的であり、不適切な初期化や不適切なプログラミング手法によって引き起こされる問題により、クラスの 2 つのバージョンが存在するなどの予期しないバグが発生する可能性があります)。

JAR ファイル名について: ファイル名にバージョンを付けることをお勧めします。ほとんどの JAR には、META-INF/Manifest.mf 内にバージョン情報が含まれています。しかし、何らかの理由でアプリを使用しているバージョンを知る必要がある場合は、各 JAR ファイルを開いてマニフェスト内のバージョンを確認するのは大変な作業です。

最後のアドバイスとして。自動ビルドツールを使用しない場合は... 1つ採用してください(Gradleを見てください。これは素晴らしいです)。ライブラリ バージョンの更新は、通常、ビルド ファイルのバージョン番号を変更し、gradle deploy. あなたが開発者ではなく、devops を担当している場合でも、自動化されたビルドを使用すると、デプロイと更新に役立ちます。

于 2013-01-18T00:20:33.717 に答える
0

Tomcat では、ファイルが解凍された後は、戦争は関係ないと思います。戦争を無視して、新しい/変更されたファイルを正しい webapp のディレクトリ (戦争と同じ名前のディレクトリ) に抽出することができます。

于 2013-01-17T23:37:22.073 に答える