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

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

打开JSP,现在我收到此错误:

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

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

如何解决这个问题?

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

要使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必须包含:

    lib

要在Maven上实现这个条件,而不需要在EAR的POM.xml中声明WAR的POM.xml的每个库的依赖性,您可以使用这个惊人的技巧 。

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

解决方案:

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

在JSP中:

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