【问题标题】:Skinny WAR, libraries in EAR: "struts-tags not found" errorSkinny WAR,EAR 中的库:“未找到 struts-tags”错误
【发布时间】:2013-10-15 12:08:21
【问题描述】:

在一个 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
...........
...........

如何解决这个问题?

【问题讨论】:

    标签: java jakarta-ee struts2 war ear


    【解决方案1】:

    将库从 WAR 移动到 EAR 可能非常有用,例如如果您在一个 EAR 中有多个 WAR*,以避免库冗余。
    * 注意:在 Struts2 中使用多个 WAR,您可能在某些应用服务器中遇到问题:read more on the official documentation


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

    1. WAR 的 META-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. EAR 的application.xml 必须包含:

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

    在Maven上实现这个条件,不需要在EAR的POM.xml中声明WAR的POM.xml各个库的依赖关系,可以使用this amazing trick

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

    解决办法:

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

    在 JSP 中:

    <%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>
    

    【讨论】:

    • 是的,这也是我想做的事情。
    猜你喜欢
    • 2011-05-02
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多