ライブラリーを WAR から EAR に移動することは、例えば、1 つの EAR 内に複数の WAR* がある場合、ライブラリーの冗長性を避けるために非常に便利です。
* 注: Struts2 で複数の WAR を使用すると、一部のアプリケーション サーバーで問題が発生する場合があります。詳細については、公式ドキュメントを参照してください。
Skinny WAR (ライブラリのない WAR)を機能させるための条件は次のとおりです。
WARMETA-INF/MANIFEST.MF
には、ライブラリをリンクする Class-Path プロパティが含まれている必要があります。
Class-Path: lib/struts2-core-2.3.15.2.jar
lib/xwork-core-2.3.15.2.jar
lib/all_your_libraries_here...
EARapplication.xml
には以下が含まれている必要があります。
<library-directory>lib</library-directory>
.
Maven でこの条件を達成するには、EAR の POM.xml で WAR の POM.xml の各ライブラリの依存関係を宣言する必要なく、この驚くべきトリックを使用できます。
とはいえ、質問で報告された問題は、TLD
ルックアップがWARのみで実行され、EARが範囲外である
という事実によって与えられます(私の知る限り、EARでTLDをルックアップする方法はありませんが、私は間違っていることが証明されます)。
ソリューション:
struts-tags.tld
からを抽出し、struts2-core-2.3.x.x.jar
(各)WAR/WEB-INF
フォルダー の下に配置します。これは、Struts2 だけでなく、JAR 内のあらゆる種類の TLD ファイルに関連しています。
JSP の場合:
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>