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

时间:2013-10-15 12:08:22

标签: java java-ee struts2 war ear

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

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

将库从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>

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

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

    解决方案:

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

    在JSP中:

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