3

Java EE プロジェクトで、すべてのライブラリを から に移動しWAR/WEB-INF/libましたEAR/lib

JSP を開くと、次のエラーが発生します。


Struts が未処理の例外を検出しました:
メッセージ:
ファイル "/struts-tags" が見つかりません
ファイル: org/apache/jasper/compiler/DefaultErrorHandler.java
行番号: 51

Stacktraces
org.apache.jasper.JasperException: File "/struts-tags" not found
...........
...........

この問題を解決するには?

4

1 に答える 1

5

ライブラリーを WAR から EAR に移動することは、例えば、1 つの EAR 内に複数の WAR* がある場合、ライブラリーの冗長性を避けるために非常に便利です。
* 注: Struts2 で複数の WAR を使用すると、一部のアプリケーション サーバーで問題が発生する場合があります。詳細については、公式ドキュメントを参照してください。


Skinny WAR (ライブラリのない WAR)を機能させるための条件は次のとおりです。

  1. 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...
    
  2. 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" %>
于 2013-10-15T12:12:35.867 に答える