Skinny WAR,EAR 中的库:“未找到 struts-tags”错误

And*_*ios 3 java ear struts2 war jakarta-ee

在 Java EE 项目中,我将所有库WAR/WEB-INF/libEAR/lib.

打开JSP,现在出现以下错误:


Struts 检测到未处理的异常:
消息:
未找到文件“/struts-tags”
文件:org/apache/jasper/compiler/DefaultErrorHandler.java
行号:51

Stacktraces
org.apache.jasper.JasperException: File "/struts-tags" not found
...........
...........
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

And*_*ios 5

将库从 WAR 移动到 EAR 可能非常有用,例如,如果一个 EAR 中有多个 WAR*,可以避免库冗余。
* 注意:Struts2中存在多个WAR,您可能会在某些应用服务器中遇到问题:请阅读官方文档了解更多内容


要使Skinny WAR(没有库的 WAR)工作,条件是:

  1. WARMETA-INF/MANIFEST.MF必须包含链接您的库的类路径属性:

    Class-Path: lib/struts2-core-2.3.15.2.jar 
                lib/xwork-core-2.3.15.2.jar     
                lib/all_your_libraries_here...
    
    Run Code Online (Sandbox Code Playgroud)
  2. EARapplication.xml必须包含:

    <library-directory>lib</library-directory>

要在Maven上达到这个条件,不需要在EAR的POM.xml中声明WAR的POM.xml的每个库的依赖关系,就可以使用这个神奇的技巧

也就是说,问题中报告的问题是由于TLD仅在 WAR 上执行查找,EAR 超出范围 (AFAIK,无法在 EAR 中查找 TLD,但我想被证明是错误的)

解决方案:

提取struts-tags.tldfrom struts2-core-2.3.x.x.jar,并将其放在(每个)WAR/WEB-INF 文件夹下。 这与 JAR 内的任何类型的 TLD 文件相关,而不仅仅是 Struts2。

在 JSP 中:

<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>
Run Code Online (Sandbox Code Playgroud)