将库从 WAR 移动到 EAR 可能非常有用,例如,如果您在一个 EAR 中有多个 WAR*,以避免库的冗余。
* 注意:Struts2 中存在多个 WAR,在某些应用服务器中可能会遇到问题:更多信息请阅读官方文档。
要使Skinny WAR(没有库的 WAR)工作,条件是:
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...
EARapplication.xml
必须包含:
<library-directory>lib</library-directory>
.
在 Maven 上实现这个条件,不需要在 EAR 的 POM.xml 中声明每个 WAR 的 POM.xml 库的依赖关系,就可以使用这个神奇的技巧。
也就是说,问题中报告的问题是由于TLD
仅在 WAR 上执行查找,EAR 超出范围
(AFAIK,无法在 EAR 中查找 TLD,但我想被证明是错误的)。
解决方案:
提取struts-tags.tld
from struts2-core-2.3.x.x.jar
,并将其放在(每个)WAR/WEB-INF
文件夹下。 这与 JAR 中的任何类型的 TLD 文件有关,不仅与 Struts2 有关。
在 JSP 中:
<%@ taglib prefix="s" uri="/WEB-INF/struts-tags.tld" %>